Sql server 为什么我在这里不是空的?

Sql server 为什么我在这里不是空的?,sql-server,null,Sql Server,Null,我得到'notnull'后跟'null': DECLARE @X Int SELECT CASE @X WHEN NULL THEN 'NULL' ELSE 'NOT NULL' END SELECT 'NULL' WHERE @X IS NULL 因为NULL为空 在case语句中,比较NULL=NULL失败,因此选择了notnull 试着像这样改变你的案例陈述 SELECT CASE WHEN @X IS NULL THEN 'NULL'

我得到'notnull'后跟'null':

DECLARE @X Int

SELECT CASE @X
    WHEN NULL THEN 'NULL'
    ELSE 'NOT NULL'
    END

SELECT 'NULL'
WHERE @X IS NULL
因为NULL为空

在case语句中,比较NULL=NULL失败,因此选择了notnull

试着像这样改变你的案例陈述

SELECT CASE 
         WHEN @X IS NULL THEN 'NULL'
         ELSE 'NOT NULL'
       END
使用

在你询问之前。默认情况下,Sql server不支持将表达式与null相等

默认情况下,它附带

SET ANSI_NULLS ON

当ANSI_NULLS处于启用状态时,您不能使用NULL=NULL检查,而是必须使用is NULL

,但我不能说“WHEN is NULL THEN”,因为这不起作用:关键字“is”附近的语法不正确。@Phillip在这种情况下,这不是正确的语法。检查我的答案哦,谢谢。我可以在9分钟内接受你的回答。NULL不是真的either@MartinSmith是的,那是真的,但我怎么解释呢。这可能是因为它无法使用关系运算符进行比较。
SET ANSI_NULLS ON