我最近在 SQL Server (2014 如果有关系的话) 中遇到了一个问题,涉及到
CASE-THEN-ELSE
语句,更准确地说是 "简单" 和 "搜索" CASE 表达式。直到现在,我认为这两者之间唯一的区别只是表达式的格式和/或书写习惯,但我想我完全错了 :)
MSDN 链接
CASE 表达式有两种格式:
简单 CASE 表达式将一个表达式与一组简单表达式进行比较以确定结果。
搜索 CASE 表达式评估一组布尔表达式以确定结果。
以下是示例:
set nocount on
declare @test nvarchar(50) = null
select
@test as [The NULL Value],
case
when @test is null
then null
else 'Not Null???'
end as [As Expected],
case @test
when null
then null
else 'Not Null???'
end as [The Pickle]
结果是:
The NULL Value As Expected The Pickle
-------------------------------------------------- ----------- -----------
NULL NULL Not Null???
有人能提供一个MSDN文档的链接吗?其中可能更详细地解释了这个问题? :)
P.S.:我敢打赌,你们很多人都认为两个结果会产生相同的输出:D
set ansi_nulls off
并观察会发生什么。;-) - shadow