我传入了一个逗号分隔的值列表,我需要将这些值与数据库进行比较
这是我传入的值的示例:
@orgList = "1123, 223%, 54%"
要使用通配符,我认为我必须这样做LIKE
,但查询运行了很长时间并且只返回 14 行(结果是正确的,但它只是需要永远,可能是因为我使用了不正确的连接)
我可以做得更好吗?
这就是我现在所做的:
declare @tempTable Table (SearchOrg nvarchar(max) )
insert into @tempTable
select * from dbo.udf_split(@orgList) as split
-- this splits the values at the comma and puts them in a temp table
-- then I do a join on the main table and the temp table to do a like on it....
-- but I think it's not right because it's too long.
select something
from maintable gt
join @tempTable tt on gt.org like tt.SearchOrg
where
AYEAR= ISNULL(@year, ayear)
and (AYEAR >= ISNULL(@yearR1, ayear) and ayear <= ISNULL(@yearr2, ayear))
and adate = ISNULL(@Date, adate)
and (adate >= ISNULL(@dateR1, adate) and adate <= ISNULL(@DateR2 , adate))
最终结果将maintable.org
是 1123 或以 223 开头或以 554 开头的所有行
我的日期疯狂的原因是因为有时存储过程只检查一年,有时检查一年范围,有时检查特定日期,有时检查日期范围......所有未使用的东西都作为空值传入。
也许问题在那里?