SQL Server是否将空值作为空字符串?

SQL Server是否将空值作为空字符串?,sql,sql-server,null,Sql,Sql Server,Null,我最近读了一段SQL代码片段,这让我很困惑 declare @test nvarchar(100) = NULL select case when @test <> '' then 1 else 0 end declare@test nvarchar(100)=NULL 选择 案例 当@test“”时,则为1 其他0 结束 我很有信心结果将是1,因为我认为NULL并不等同于空字符串。但是,实际输出为0 (我在Windows 7 64

我最近读了一段SQL代码片段,这让我很困惑

declare @test nvarchar(100) = NULL
select
    case
        when @test <> '' then 1
        else 0
    end
declare@test nvarchar(100)=NULL
选择
案例
当@test“”时,则为1
其他0
结束
我很有信心结果将是
1
,因为我认为
NULL
并不等同于空字符串。但是,实际输出为
0

(我在Windows 7 64位上使用MS SQL Server 2012)

据我所知,
'
是一个空字符串,表示该值包含0个字符,
Null
表示数据不存在。但现在我不确定。谁能帮我整理一下吗?这是某种例外情况吗?

Null不等于“”

Null表示没有值

Null也不等于Null,因此
选择1,其中Null=Null
也将不返回任何内容

用这个代替

declare @test nvarchar(100) = NULL
select case when @test IS NULL then 1
            else 0
        end
Null不等于“”

Null表示没有值

Null也不等于Null,因此
选择1,其中Null=Null
也将不返回任何内容

用这个代替

declare @test nvarchar(100) = NULL
select case when @test IS NULL then 1
            else 0
        end

使用类似以下内容:

声明@test nvarchar(100)=空

当@test“”或@test为空时选择大小写,然后选择1
其他0
结束

使用类似以下内容:

声明@test nvarchar(100)=空

当@test“”或@test为空时选择大小写,然后选择1
其他0
结束

当您使用
NULL
进行比较时,它总是返回NULL/unknown,因此,事实上不是真的,所以是假的

要分析
NULL
字段,必须使用
IS NULL

select
    case 
        when @test IS NULL then ....
        when @test <> '' then ....
        else ....
    end
选择
案例
当@test为空时,则。。。。
当@test“”时,则。。。。
其他的
结束
或者,您可以按如下方式重新编写查询:

select
    case 
        when @test IS NULL or @test = '' then ...
        when @test <> '' then ....
    end
选择
案例
当@test为NULL或@test=''时,则。。。
当@test“”时,则。。。。
结束

当您使用
NULL
进行比较时,它总是返回NULL/unknown,因此,事实上不是真的,所以是假的

要分析
NULL
字段,必须使用
IS NULL

select
    case 
        when @test IS NULL then ....
        when @test <> '' then ....
        else ....
    end
选择
案例
当@test为空时,则。。。。
当@test“”时,则。。。。
其他的
结束
或者,您可以按如下方式重新编写查询:

select
    case 
        when @test IS NULL or @test = '' then ...
        when @test <> '' then ....
    end
选择
案例
当@test为NULL或@test=''时,则。。。
当@test“”时,则。。。。
结束
NULL与“”不同。就像NULL与0不同一样。NULL是一个特殊值,用于指示未存储数据类型的值

如果要将NULL合并为具体值,可以使用ISNULL或SQL Server中的合并函数

DECLARE @test NVARCHAR(100) = NULL
SELECT
    CASE
        WHEN ISNULL(@test, N'') <> N'' THEN
            1
        ELSE
            0
    END
DECLARE@test NVARCHAR(100)=NULL
挑选
案例
当ISNULL(@test,N“”)N“”时,则
1.
其他的
0
结束
NULL与“”不同。就像NULL与0不同一样。NULL是一个特殊值,用于指示未存储数据类型的值

如果要将NULL合并为具体值,可以使用ISNULL或SQL Server中的合并函数

DECLARE @test NVARCHAR(100) = NULL
SELECT
    CASE
        WHEN ISNULL(@test, N'') <> N'' THEN
            1
        ELSE
            0
    END
DECLARE@test NVARCHAR(100)=NULL
挑选
案例
当ISNULL(@test,N“”)N“”时,则
1.
其他的
0
结束

Read。你正在向聚会发送邀请<代码>'就像是在没有任何内容的情况下收回rsvp单
null
什么也没有得到。该比较的结果是“未确定的”,不是真的或假的。当比较的任何一侧都有空值时,结果既不是真的也不是假的,结果是空的。这意味着在您的比较中,结果没有计算为true,而是计算为NULL,属于else。您可以快速地从
切换到
=
,至少意识到这里发生了一些奇怪的事情。“因为我认为NULL并不等同于空字符串”——对于SQL Server,那部分你是对的,但结论是错的。我认为这可能是一个骗局,但你也可以自己看看,仔细检查一下你当前的问题中是否有某些方面没有得到回答?阅读。你正在向聚会发送邀请<代码>'就像是在没有任何内容的情况下收回rsvp单
null
什么也没有得到。该比较的结果是“未确定的”,不是真的或假的。当比较的任何一侧都有空值时,结果既不是真的也不是假的,结果是空的。这意味着在您的比较中,结果没有计算为true,而是计算为NULL,属于else。您可以快速地从
切换到
=
,至少意识到这里发生了一些奇怪的事情。“因为我认为NULL并不等同于空字符串”——对于SQL Server,那部分你是对的,但结论是错的。我认为这可能是一个骗局,但你自己也能仔细检查一下你当前的问题是否有某些方面没有得到回答吗?从技术上讲,比较结果返回NULL,而不是false。@SeanLange:我已经整合了我的答案从技术上讲,比较结果返回NULL,“不是假的。”肖恩朗格:我已经把我的答案综合起来了