-1

下面的参数看起来像 (2,3,4,5) 或 (2) 甚至是 NULL 列 ServiceEntryPart 可能在代码部分中具有如下数据。我的问题是正确的语法是什么,所以我可以使用过滤器。如果过滤器为 NULL,我将完全忽略它。如果它是NULL(不包括过滤器),那么到目前为止我所拥有的工作正常,但是当我有例如(1,2)的参数时,它不起作用..谢谢

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)   
4

1 回答 1

1

看起来您想为 IN 子句传入一个变量列表。一种方法是使用动态 SQL,但我会说这是矫枉过正。

您可以尝试以下方法:

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

这是使用字符串搜索来执行与 IN 等效的操作。它假定 @ServiceTypes 是一个没有空格的逗号分隔列表。它前置和后置逗号。当您查找类似 5 的内容时,它实际上是在查找“,5”,因此它与列表中的 25 或 55 不匹配。

于 2012-07-17T20:06:41.740 回答