select case 'NULL' when 'NULL' then 'f' end as out
saída: f
mas
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
deve apenas retornar NULL e NULL está correto, mas a instrução case não funciona.
Eu quero 'N' na saída
Há dois pontos de confusão aqui.
A primeira é que você parece pensar
'NULL'
eNULL
ser o mesmo; Eles não são. O primeiro é uma string literal, o último apenas significa a ausência de um valor.A segunda é que você pode usar
NULL
em comparações de igualdade; e você não pode. Tente isto:Resultado:
O motivo é que
NULL
é desconhecido - portanto, o SQL Server não pode dizer se é ou não igual a um valor específico (ou mesmo a outroNULL
valor). Para verificar se um valor éNULL
, você não pode dizerCASE WHEN value = NULL
ouCASE value WHEN NULL
, mas pode dizerCASE WHEN value IS NULL
:Resultado:
Agora, acho que existem maneiras melhores de realizar o que você parece precisar (não tenho certeza se entendi os requisitos aqui), mas no prazo imediato, você pode corrigir isso dizendo: