SQL Server NULLIF未按预期工作?

SQL Server NULLIF未按预期工作?,sql,sql-server,Sql,Sql Server,我有以下SQL代码 Declare @var nvarchar(5) begin Set @var = '' Select 1 where @var = nullif(@var, ''); End 这不会输出任何结果。为什么NullIF不工作?NullIF在两个表达式不相等时返回第一个表达式。如果表达式等效,则NULLIF返回第一个表达式类型的空值 NULLIF如果两个表达式不相等,则返回第一个表达式。如果表达式等效,则NULLIF返回第一个表达式类型的空值 使用ISNULL

我有以下SQL代码

Declare
@var nvarchar(5)
begin
    Set @var = ''

    Select 1 where @var = nullif(@var, '');
End

这不会输出任何结果。为什么NullIF不工作?

NullIF在两个表达式不相等时返回第一个表达式。如果表达式等效,则NULLIF
返回第一个表达式类型的空值


NULLIF如果两个表达式不相等,则返回第一个表达式。如果表达式等效,则NULLIF
返回第一个表达式类型的空值


使用
ISNULL

Declare
@var nvarchar(5)
begin
  Set @var = ''

  Select 1 where @var = ISNULL(@var, '');
End
更新

Declare
@var nvarchar(5)
begin
  Set @var = ''

 Select 1 where @var = @var OR @var = ''
End

使用
ISNULL

Declare
@var nvarchar(5)
begin
  Set @var = ''

  Select 1 where @var = ISNULL(@var, '');
End
更新

Declare
@var nvarchar(5)
begin
  Set @var = ''

 Select 1 where @var = @var OR @var = ''
End

根据你留下的评论,你的问题有点误导

我相信你实际上是在问为什么以下陈述不起作用:

SELECT 1 WHERE NULLIF(@var, '') = null
您可以通过执行以下操作来实现这一点:

SET ANSI_NULLS ON
SELECT 1 WHERE NULLIF(@var, '') = null
-启用时,equals运算符将不起作用,您必须指定
为null
。禁用此选项后,可以对空值使用equals运算符

--

这是解决问题的更好方法,因为在未来的SQL Server版本中,ANSI_NULLs将始终处于启用状态

SELECT 1 WHERE ISNULL(@var, '') = ''

根据你留下的评论,你的问题有点误导

我相信你实际上是在问为什么以下陈述不起作用:

SELECT 1 WHERE NULLIF(@var, '') = null
您可以通过执行以下操作来实现这一点:

SET ANSI_NULLS ON
SELECT 1 WHERE NULLIF(@var, '') = null
-启用时,equals运算符将不起作用,您必须指定
为null
。禁用此选项后,可以对空值使用equals运算符

--

这是解决问题的更好方法,因为在未来的SQL Server版本中,ANSI_NULLs将始终处于启用状态

SELECT 1 WHERE ISNULL(@var, '') = ''

嗨,Prashant16,对不起,实际上我的问题没有详细说明。当@var为空时,我必须在=符号的右侧强制null。如果我使用“Select 1 where var为null”,它是有效的;但是当我使用=符号时,它不起作用。嗨,Prashant16,对不起,实际上我的问题没有详细说明。当@var为空时,我必须在=符号的右侧强制null。如果我使用“Select 1 where var为null”,它会起作用;但是当我使用=符号时,它不起作用。你到底想做什么/检查?你到底想做什么/检查?