2014-02-07 91 views
2

我有一個存儲過程,它的參數可以是NULL或非NULL值。 我需要在WHERE子句中比較這個參數。如果參數非NULL,解決NULL和非NULL值的單個SQL查詢

where ... 
and parameter = non-NULL-value 

將工作。

但當參數將是空的,它不會是符合ANSI標準:

where ... 
and parameter = NULL 

我不想寫兩個單獨的查詢。如何確保在同一查詢中符合ANSI標準?

+0

你想要得到的結果是什麼,當參數是'NULL'? – Lamak

+1

您的第二個查詢符合ANSI標準。 where子句總是返回false。 –

+0

列是什麼類型? – Jodrell

回答

4

假設值傳遞到您的查詢在@value參數,你可以做這樣的:

SELECT * 
FROM MyTable 
WHERE (@value IS NOT NULL AND parameter = @value) -- Or simply parameter = @value 
    OR (@value IS NULL AND parameter IS NULL) 
+0

這就行了。謝謝。 – aliensurfer