2014-10-06 59 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,這會導致各種令人驚訝的結果。