下面的参数看起来像(2,3,4,5)或(2),甚至可能是NULL,ServiceEntryPart列可能在代码部分中具有如下数据。我的问题是什么是正确的语法,所以我可以使用过滤器。如果过滤器为NULL,我将完全忽略它。到目前为止我的工作正常,如果它是一个NULL(排除过滤器),但当我有例子(1,2)的param,它不起作用..谢谢
ServiceEntryPart.ServiceTypeIDs
4,3
3
NULL
1
8
2,5
--Filter:
@ServiceTypes nvarchar(100) = NULL
--Filter with values SET @ServiceTypes = (1,2,4,5)
--Where Clause
WHERE (ServiceEntryPart.ServiceTypeIDs = ISNULL(@ServiceTypes,ServiceEntryPart.ServiceTypeIDs)
答案 0 :(得分:1)
看起来您想传入IN子句的变量列表。一种方法是使用动态SQL,但我认为这是过度的。
您可以尝试以下内容:
where @ServiceTypes is null or
charindex(','+cast(ServiceEntryPart.ServiceTypeIDs as varchar(255)+',',
','+@ServiceTypes+',') > 0
这是使用字符串搜索来执行相当于IN的操作。它假定@ServiceTypes是逗号分隔的列表,没有空格。它以逗号为前缀和后缀。当你寻找像5这样的东西时,它真的会找到“,5”,所以它与列表中的25或55不匹配。