Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ISNULL时如何在中使用SQL_Sql_Sql Server - Fatal编程技术网

使用ISNULL时如何在中使用SQL

使用ISNULL时如何在中使用SQL,sql,sql-server,Sql,Sql Server,下面的参数看起来类似于(2,3,4,5)或(2),甚至为NULL。列ServiceEntryPart在代码部分中可能包含如下数据。我的问题是正确的语法是什么,这样我就可以使用过滤器了。如果过滤器为空,我将完全忽略它。到目前为止,如果它是NULL(不包括过滤器),那么我所拥有的一切都可以正常工作,但是当我拥有参数(例如(1,2))时,它就不工作了。。谢谢 ServiceEntryPart.ServiceTypeIDs 4,3 3 NULL 1 8 2,5 --Filter: @

下面的参数看起来类似于(2,3,4,5)或(2),甚至为NULL。列ServiceEntryPart在代码部分中可能包含如下数据。我的问题是正确的语法是什么,这样我就可以使用过滤器了。如果过滤器为空,我将完全忽略它。到目前为止,如果它是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)   

看起来您想为in子句传入一个变量列表。一种方法是使用动态SQL,但我认为这太过分了

您可以尝试以下方法:

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

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

您不能将列表中的整个
作为单个命名参数传递给查询,无论是否使用
ISNULL
。那么您要说的解决方案是什么?您需要定义所需的行为。如果参数为@ServiceTypes is null,您希望a)忽略该参数还是b)仅拾取null值?另外,破坏1NF也是个坏主意。@Conrad我想使用这个过滤器,如果它包含一个值,如果它为空,那么我将完全忽略它。如果一个问题的结果是否定的,则暗示您的问题需要解决。最后的投票表明你的问题太神秘了,无法修正。我明白了,这太棒了!感谢你的回答!!:)