SQL如何在使用ISNULL时使用IN

时间:2012-07-17 19:26:48

标签: sql sql-server

下面的参数看起来像(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)   

1 个答案:

答案 0 :(得分:1)

看起来您想传入IN子句的变量列表。一种方法是使用动态SQL,但我认为这是过度的。

您可以尝试以下内容:

where @ServiceTypes is null or
      charindex(','+cast(ServiceEntryPart.ServiceTypeIDs as varchar(255)+',',
                ','+@ServiceTypes+',') > 0

这是使用字符串搜索来执行相当于IN的操作。它假定@ServiceTypes是逗号分隔的列表,没有空格。它以逗号为前缀和后缀。当你寻找像5这样的东西时,它真的会找到“,5”,所以它与列表中的25或55不匹配。