2011-08-30 19 views
2

我想什麼時候@AddressCode爲null,則只需執行SQL服務器機箱

SELECT 
    * 
FROM 
    Addresses 
WHERE 
    1= 1 

如果@AddressCode不爲NULL,則執行

SELECT 
    * 
FROM 
    Addresses 
WHERE 
    1= 1 AND @AddressCode=Addresses.AddressCode 

我怎麼能實現這個...我試着查詢下面,它不工作的地址與NULL值或當@AddressCode is NULL ....(地址只是一個虛表名)

Declare @AddressCode varchar(20) 
Set @AddressCode=NULL 

SELECT 
    * 
FROM 
    Addresses 
WHERE 
    1= 1 
    AND 
    CASE @AddressCode 
     WHEN NULL 
     THEN Addresses.AddressCode 
     ELSE @AddressCode 
    END =Addresses.AddressCode 

我盡力,但我不能讓它...我知道我可以寫IF語句,寫個人SELECT語句,但不希望這樣做,因爲我有很多這樣的標準作爲@AddressCode :(

+0

ISNULL是你的朋友在這裏... – Grantly

回答

10
SELECT * 
FROM 
    Addresses 
WHERE 
    (@AddressCode IS NULL OR Addresses.AddressCode = @AddressCode) 
+1

如果地址碼索引,你需要使用'RECOMPILE'本,以防止情況下不必要的掃描來'@AddressCode IS NOT NULL' –

+0

感謝它的工作原理簡直太棒了:)最初我錯過了()在那裏搞砸了,我修好了。 – prsthapit

3

在這種情況下,您正在使用CASE(與null比較)。正確的做法是

CASE 
    WHEN @AddressCode IS NULL THEN Addresses.AddressCode 
    ELSE @AddressCode 
END 

與您的查詢的問題是,CASE a WHEN b THEN c...測試如果a=b它變成FALSENULL)如果一個操作數是零。
另一個問題是,如果你真的需要CASE這裏...