cod*_*ori -1 xml sql-server transaction xquery
select case 'NULL' when 'NULL' then 'f' end as out
Run Code Online (Sandbox Code Playgroud)
输出:f
但
select case (select (SELECT LEFT(l.list,LEN(l.list)-1)
FROM
(SELECT o.Reciting_Path + '|' + o.Declaimer +',' AS [text()]
FROM Poetry_Reciting AS o
where o.Poetry_Id=6764
FOR XML PATH(''))l(list)) ) when 'NULL' then 'N' end as dd
Run Code Online (Sandbox Code Playgroud)
应该只返回NULL并且 NULL 是正确的,但 case 语句不起作用。
我想要输出中的“N”
这里有两个混淆点。
第一个是你似乎认为'NULL'和NULL是一样的;他们不是。前者是字符串文字,后者仅表示没有值。
第二个是你可以NULL在等式比较中使用;而你不能。尝试这个:
SELECT CASE NULL WHEN NULL THEN 1 ELSE 0 END;
Run Code Online (Sandbox Code Playgroud)
结果:
----
0
Run Code Online (Sandbox Code Playgroud)
原因是NULL未知 - 所以 SQL Server 无法告诉您它是否等于或不等于特定值(甚至另一个NULL值)。要检查值是否为NULL,您不能说CASE WHEN value = NULL或CASE value WHEN NULL,但可以说CASE WHEN value IS NULL:
SELECT CASE WHEN NULL IS NULL THEN 1 ELSE 0 END;
Run Code Online (Sandbox Code Playgroud)
结果:
----
1
Run Code Online (Sandbox Code Playgroud)
现在,我认为有更好的方法来完成你似乎需要的东西(我不相信我完全理解这里的要求),但在短期内你可以通过说:
select case WHEN (select ... ) IS NULL then 'N' end as dd;
Run Code Online (Sandbox Code Playgroud)