如果MyTable.MyColumn
和@MyVar
中的值是NULL
,那麼下面的語句返回什麼?ISNULL替換值爲NULL時會發生什麼情況?
ISNULL(@MyVar, MyTable.MyColumn)
如果MyTable.MyColumn
和@MyVar
中的值是NULL
,那麼下面的語句返回什麼?ISNULL替換值爲NULL時會發生什麼情況?
ISNULL(@MyVar, MyTable.MyColumn)
create table MyTable
(
MyColumn int
)
insert into MyTable default values
declare @MyVar int
select ISNULL(@MyVar, MyTable.MyColumn)
from MyTable
結果:
-----------
NULL
它將返回NULL,當然。 :)也很容易測試。這需要什麼?例如,如果您需要確保至少返回一些值,則有幾個選項。例如案例:
SELECT CASE WHEN @MyVar IS NULL
THEN ISNULL(MyTable.MyColumn, 'replacementvalue')
ELSE @MyVar
END AS RESULT
FROM MyTable
我們需要更多地瞭解真正的問題在這裏。
試試這個:-)
select ISNULL(null,null)
其他人解釋發生了什麼。如果你不想要這些空值,那麼解決方案。
如果表達式是在SELECT
列表 - 你不想NULL
出現在結果中,你可以使用COALESCE()
功能,可能需要超過2個參數:
COALESCE(@MyVar, MyTable.MyColumn, another_value)
如果你有它的條件,就像你在評論中提到:
WHERE MyTable.MyColumn = ISNULL(@MyVar, MyTable.MyColumn)
你可以(假設你要替換它保持狀態TRUE
時@MyVar
爲空,不管MyTable.MyColumn
爲空或不):
WHERE (MyTable.MyColumn = @MyVar OR @MyVar IS NULL)
遺傳代碼,似乎這是擺在假設'MyColumn'不能爲空。由於其他地方的錯誤,「MyColumn」中的某些記錄現在具有「Null」值。這是在哪裏聲明'Where MyTable.MyColumn = ISNULL(@ MyVar,MyTable.MyColumn)'謝謝你的測試:) – robasta 2013-03-19 14:09:17
Np,剛剛意識到我承諾這個迴應後,你可能只是做ISNULL(ISNULL(@MyVar ,MyTable.MyColumn),'replacementvalue')也可以執行任何方式,但是鍵入和讀取要簡單得多。但好的,GL。 :) – Kahn 2013-03-19 14:28:02