2013-11-20 27 views
0

在代碼中,我正在維護,我看到我們得到一個數據視圖,然後申請一個RowFilter,它例如:ISNULL()中的RowFilter不一樣,在SQL

dv.RowFilter = "IsNull(LOAN_STATUS, 'NULL') = 'NULL'"; 

這將返回所有記錄與LOAN_STATUS在數據庫中爲NULL。

我想我會的條件轉移到SQL和等價的WHERE子句補充說:

WHERE [Other existing conditions] AND IsNull(LOAN_STATUS, 'NULL') = 'NULL' 

然而,我的SQL這段時間沒回我什麼。它將與

WHERE [Other existing conditions] AND LOAN_STATUS IS NULL 

我做了一些更多的測試工作:使用的RowFilter ,兩者產生相同的記錄有效ISNULL()是一樣的IS NULL

dv.RowFilter = "IsNull(LOAN_STATUS, 'NULL') = 'NULL'"; 

VS

dv.RowFilter = "LOAN_STATUS IS NULL"; 

但是,嚴格使用SQL,第一個沒有返回記錄

WHERE [Other existing conditions] AND IsNull(LOAN_STATUS, 'NULL') = 'NULL' 

VS

WHERE [Other existing conditions] AND LOAN_STATUS IS NULL 

誰能告訴我,如果是正常的,給我解釋一下它背後的原因何在呢?

回答

-1

你貼什麼:dv.RowFilter = "IsNull(LOAN_STATUS, 'NULL') = 'NULL'"

說,如果LOAN_STATUS爲null賦值爲null,然後檢查其是否爲空, 我看起來很奇怪。

​​檢查一個表達式,如果它爲空,它將用replacement_value替換表達式。

BOL查看更多詳細信息,或此鏈接:

http://technet.microsoft.com/en-us/library/ms184325.aspx

IS NULL檢查,如果條件爲null,它沒有取代值意圖。如果你在談論TSQL並要檢查,如果值爲NULL使用WHERE MyField IS NULLMyField IS NOT NULL

+0

我明白ISNULL()函數中的替換與直接檢查字段是否爲NULL。我不明白爲什麼它在RowFilter中的行爲相同 - 使用任何一種方法有效地返回所有帶NULL值的記錄......而在SQL WHERE中,同時使用ISNULL()和IS NULL的行爲不一樣? – Gotcha

1

WHERE [其他現有的條件下] AND ISNULL(LOAN_STATUS, 'NULL')= 'NULL'

VS

WHERE [現有的其他條件]和LOAN_STATU IS NULL

要檢查兩個不同的領域,第一個是檢查LOAN_STATUS第二個爲c黑金LOAN_STATU

下面的兩個語句

ISNULL(Field,Constant) = ConstantField IS NULL在功能上不等於中恆TSQL字段的所有值

你看到你所看到的結果,另一個可能的原因是,如果同ODBC系統正在創建空值。

+0

對不起,我做了一個LOAN_STATU類型應該是LOAN_STATUS ...所以WHERE子句在同一個域中檢查名爲LOAN_STATUS的空值 – Gotcha