2014-10-06 61 views
-1

接入代码了解 “ISNULL” 功能的工作在SQL

iif(Format(SUM(Field))='',0,SUM(Field)) 

SQL代码

IsNull(SUM(Field),0) As Amt 

接入码声明它清楚地表明,查询有运行SUM函数 2次得到SUM and 如果记录是空白的。

但我想知道内部SQL运行多少次SQL语句中的SUM函数? 1或2?请提供一些解释。

+2

有一次(因为[反对'COALESCE'](http://sqlmag.com/t-sql/coalesce-vs-isnull)btw,搜索“用于子查询”)。 – 2014-10-06 12:35:47

+0

MySQL **或** MS SQL **或**两者?通常情况下,如果你有'null'值,你可以像这样使用它:'SUM(IFNULL(field,0))' - 因为它不会自动将null转换为'0'(-MySQL)。 – DanFromGermany 2014-10-06 12:36:31

+0

只有抱歉的问题SQL – 2014-10-06 12:38:42

回答

1

我的复制粘贴评论:

一次,为opposed to COALESCE

使用子查询

ISNULL函数在 有一个重要的优势COALESCE内部它不评估输入表达式不止一次。在 与标准SQL一致,COALESCE(v1,v2)仅在内部 翻译为CASE WHEN v1 IS NOT NULL THEN v1 ELSE v2 END。作为 的结果,SQL Server可能会多次评估表达式v1,这会导致各种令人惊讶的结果。