SQL Server NULLIF未按预期工作?
我有以下SQL代码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
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”,它会起作用;但是当我使用=符号时,它不起作用。你到底想做什么/检查?你到底想做什么/检查?