任何人都可以解释为什么以下查询正在评估to' null'即使分配给@Test = NULL的值并且在CASE中检查它是否为0
declare @Test varchar = NULL
SELECT (CASE ISNULL(@Test, '')
WHEN 0 THEN 'null'
ELSE 'not null'
END) as 'value'
这会返回' null'
和
declare @Test varchar = NULL
SELECT (CASE ISNULL(@Test, '')
WHEN '' THEN 'null'
ELSE 'not null'
END) as 'value'
这也会返回' null'
所以评估ISNULL(NULL,'')到''或0没有任何区别?
答案 0 :(得分:1)
更好的方法来尝试如下
CASE WHEN @Test IS NULL THEN 0 -- Type numeric
ELSE '-' -- Type VARCHAR
END AS outputvlaue
这会给你erro,因为你不能有两种返回类型,所以 尝试如下
CASE WHEN @Test IS NULL THEN 0 -- Type numeric
ELSE 123 -- Type numeric
END AS outputvlaue
上面的将起作用
查询的输出是正确的ISNULL(@Test, '')
表示当存在null时返回''值。
这两个查询都有效,因为例如,当您尝试这样的语句时
SELECT (CASE ISNULL(@Test, '')
WHEN 0 THEN 'null'
ELSE 'not null'
END) as 'value'
Isnull返回真值,因为你在case casement中给出的表达式求值为true,即ISNULL(@Test,'')及其真值..
所以你必须尝试这样
SELECT CASE WHEN ISNULL(NULL,'') = ''
THEN 'a'
ELSE 'b'
END
将返回'a'