SQL-COALESCE和ISNULL之间的区别?

SQL-COALESCE和ISNULL之间的区别?,sql,sql-server,Sql,Sql Server,COALESCE()和ISNULL(,'')之间的实际区别是什么 在SQL连接中避免空值时,最好使用哪一个 谢谢 比较COALESCE和ISNULL ISNULL函数和COALESCE表达式具有类似的用途,但其行为可能有所不同 因为ISNULL是一个函数,所以它只计算一次。如上所述, 合并表达式的输入值可以进行多次求值 时代 结果表达式的数据类型确定为 不一样。ISNULL使用第一个参数COALESCE的数据类型 遵循大小写表达式规则并返回值的数据类型 以最高的优先级 ISNULL和COALES

COALESCE()和ISNULL(,'')之间的实际区别是什么

在SQL连接中避免空值时,最好使用哪一个

谢谢

比较COALESCE和ISNULL

ISNULL函数和COALESCE表达式具有类似的用途,但其行为可能有所不同

  • 因为ISNULL是一个函数,所以它只计算一次。如上所述, 合并表达式的输入值可以进行多次求值 时代
  • 结果表达式的数据类型确定为 不一样。ISNULL使用第一个参数COALESCE的数据类型 遵循大小写表达式规则并返回值的数据类型 以最高的优先级
  • ISNULL和COALESCE的结果表达式的可空性不同。这个 ISNULL返回值始终被视为不可为Null(假定返回值为 不可为null的参数),而与非null参数合并是 被认为是无效的。所以表达式为NULL(NULL,1)和 COALESCE(NULL,1),尽管等价项具有不同的NULL性 价值观如果在中使用这些表达式,则会产生差异 计算列,创建键约束或生成返回值 标量UDF的定义,以便可以对其进行索引,如中所示 下面是一个例子
  • 对ISNULL和 聚结也是不同的。例如,ISNULL的NULL值为 转换为int,而对于COALESCE,必须提供数据类型。 ISNULL只接受2个参数,而COALESCE接受一个变量 参数数量

    来源:

    COALESCE()
    可以有多个输入,它将按顺序计算,直到其中一个输入不为null,例如
    COALESCE(Col1,Col2,Col3,'N/A')
    。建议MS使用此选项,而不是
    ISNULL()


    ISNULL()
    只能有一个输入,但是它的速度比COALESCE稍快。

    主要区别在于,
    COALESCE
    是ANSI标准,因此您也可以在其他RDBMS中找到它,另一个区别是,您可以向
    COALESCE
    提供一个要检查的值的完整列表,而向
    ISNULL
    只能传递一个值。

    因为
    ISNULL
    是一个函数,它只被计算一次。如上所述,可以多次计算
    合并
    表达式的输入值。
    COALESCE
    基本上转换为
    CASE
    表达式,
    ISNULL
    是数据库引擎中实现的内置函数


    coalesce
    由SQL标准定义,几乎可以在所有DBMS上使用
    isnull()
    仅适用于Microsoft产品。
    isnull
    需要两个参数,
    COALESCE
    可以使用
    n
    参数,这取决于SQL Server的要求和版本。MySQL也有isnull。在问这个问题之前,我发现了isnull与COALESCE的问题。但是我问了连接列时的实际差异(性能、最佳实践、代码行为等),这就是为什么我提出了一个新问题。抱歉,如果这是一个重复的问题。更重要的是,
    COALESCE
    只是一个
    CASE
    表达式的快捷方式,这意味着优化器重写它以使用
    CASE
    instead@paxdiablo联机丛书,SQL Server官方文档。抱歉,不确定它是否仍然被称为,但它曾经被称为。啊,谢谢,这比我的尝试更有意义:-)类型处理(2):“
    ISNULL
    COALESCE
    ”[需要引用]更快。在哪些情况下?为什么?
    > USE tempdb; 
    > GO
    
    > -- This statement fails because the PRIMARY KEY cannot accept NULL values
    > -- and the nullability of the COALESCE expression for col2 
    > -- evaluates to NULL. 
    
    > CREATE TABLE #Demo  (  col1 integer NULL,  col2 AS COALESCE(col1, 0) PRIMARY KEY,  col3 AS ISNULL(col1, 0)  ); 
    > 
    > -- This statement succeeds because the nullability of the 
    > -- ISNULL function evaluates AS NOT NULL.
    > 
    > CREATE TABLE #Demo  (  col1 integer NULL,  col2 AS COALESCE(col1, 0), 
    > col3 AS ISNULL(col1, 0) PRIMARY KEY  );