我正在阅读 SQL Server 2012 考试的文档,我看到了以下几点:
case 与 isnull 与 coalesce
现在,我知道如何使用每一个,但我不知道何时使用每一个。请一些机构澄清一下。谢谢。
附言。请问我们可以给考试题一个标签吗?
我正在阅读 SQL Server 2012 考试的文档,我看到了以下几点:
case 与 isnull 与 coalesce
现在,我知道如何使用每一个,但我不知道何时使用每一个。请一些机构澄清一下。谢谢。
附言。请问我们可以给考试题一个标签吗?
ISNULL - 仅在 SQL Server 中可用。允许测试和替换一个 NULL 值。
COALESCE - ANSI 标准。允许使用可变长度参数集中的第一个非空值进行测试和替换 NULL 值。重要的是要注意数据类型的优先级因素
在上面的示例中,'a' 是第一个非空值,但字符数据的优先级低于整数。
ISNULL 与 COALESCE 之间的另一个考虑因素是 ISNULL 的结果被确定为 NOT NULL,而 COALESCE 调用的结果是 NULLable。请参阅 JRJ 的帖子ISNULL() <> COALESCE()虽然这似乎是一件微不足道的事情,但查询优化器可以根据列的可空性制定不同的计划。
您可以通过 dmo sys.dm_exec_describe_first_result_set运行它来轻松测试 isnull/coalesce/case 表达式的可空性
CASE - 也是一个 ANSI 标准标量函数。当我有一个无法用简单标量表示的测试但我承认这是一个非常弱的答案时,我会考虑在前两个上使用 CASE。
ISNULL 使您可以返回 1 个替换,COALESCE 不限于一个值,例如
COALESCE(v1,v2,v3,v4,v5)
,如果 V5 是唯一不为 NULL 的值,它将被返回