T-SQL中ISNULL和COALESCE之间的区别

时间:2015-10-02 18:16:02

标签: sql sql-server

我在msdn上阅读了ISNULLCOALESCE之间的比较 Microsoft's explain

的部分
  

" ISNULL和COALESCE的验证也不同。例如,   ISNULL的NULL值转换为int,而对于COALESCE,则转换为int   必须提供数据类型。"

我很困惑。有人可以举个例子来说明一点吗?

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

这是有效查询,将返回INT

SELECT ISNULL(NULL, NULL);

它会失败:

SELECT COALESCE(NULL, NULL);
  

COALESCE的至少一个参数必须是一个表达式   不是NULL常量。

这是有效查询,将返回INT

 SELECT COALESCE(CAST(NULL AS INT), NULL);

您可以检查结果集的元数据:

<强> DEMO

SELECT 'ISNULL',name, system_type_name
FROM sys.dm_exec_describe_first_result_set ('SELECT ISNULL(NULL, NULL)', NULL,0)
UNION ALL
SELECT 'COALESCE', name, system_type_name
FROM sys.dm_exec_describe_first_result_set (N'SELECT COALESCE(CAST(NULL as FLOAT), NULL);', NULL,0)