Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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

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
SQL案例查询条件_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

SQL案例查询条件

SQL案例查询条件,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我的存储过程中存在以下条件: [DMO].[DriverModelName] = CASE WHEN ISNULL(@driverModelName,'NotSet') = 'NotSet' THEN [DMO].[DriverModelName] ELSE @driverModelName END 这意味着,当我将'NotSet'传递给varchar参数@driverModelName时,它应该返回所有行,但出于某种原因,它只返回那些列driverModelName中有

我的存储过程中存在以下条件:

[DMO].[DriverModelName] =
   CASE WHEN ISNULL(@driverModelName,'NotSet') = 'NotSet' THEN 
[DMO].[DriverModelName]
   ELSE
@driverModelName
    END
这意味着,当我将
'NotSet'
传递给
varchar
参数
@driverModelName
时,它应该返回所有行,但出于某种原因,它只返回那些列
driverModelName
中有值的行&忽略
null
值行


我在这里做错了什么吗?

这是因为
NULL==NULL=FALSE
,在
WHERE
子句中,除非您将
ANSI_NULLS
设置为
关闭。例如:

SET ANSI_NULLS OFF

IF NULL = NULL
    PRINT 'TRUE'
ELSE
    PRINT 'FALSE'

SET ANSI_NULLS ON

IF NULL = NULL
    PRINT 'TRUE'
ELSE
    PRINT 'FALSE'
结果是:

TRUE
FALSE
为了获取所有行,包括
NULL
值,应该使用

(@driverModelName IS NULL OR [DMO].[DriverModelName] = @driverModelName)

供参考:

  • 关于捕获所有查询的附加阅读:

  • 盖尔·肖
  • 埃尔兰·索马斯科格

  • 如果
    [DMO].[DriverModelName]
    曾经是
    NULL
    那么您希望这个
    案例的结果是什么?该列周围是否也缺少一个
    ISNULL()

    ISNULL([DMO].[DriverModelName], 'NotSet') =
       CASE WHEN ISNULL(@driverModelName,'NotSet') = 'NotSet' THEN 
    [DMO].[DriverModelName]
       ELSE
       @driverModelName
    END
    

    你不能说NULL=@someValue,它必须是
    IS NULL
    或者用
    ISNULL()处理两边的问题

    谢谢@T McKeown&wewesthemenace。我尝试了您的两个建议,但是该过程仍然没有返回[DMO].[DriverModelName]为空的行。如果参数@driverModelName为null,则我希望包括所有行[DMO]。[driverModelName]有值或为null或空。为什么不将整个行粘贴到其中clause@FelixPamittan&McKeown,非常感谢我从你的帖子中得到了我的解决方案。