2015-12-14 68 views
0

只有當變量有數據時,我纔想添加條件到WHERE子句。僅當數據存在時才添加條件

我試着用下面的case語句,但它有一個語法錯誤。

Declare @last_name varchar(10) = null; 
Select * from TABLE1 
Where FirstName = 'John' 
AND CASE WHEN @last_name IS NOT NULL THEN LastName = @last_name 
+0

這是您正在使用的案例表達式,而不是case語句! – jarlh

回答

5
Select * from TABLE1 
where FirstName = 'John' 
    AND (@last_name IS NULL OR LastName = @last_name) 
0

其他人已經發布更好的方法來寫你試圖表達的邏輯,但爲了以防萬一,你需要使用CASE語法在未來,記住語法要求你包括字END。這告訴SQL表達式完成的地方。

這是一個基本的CASE表情會是什麼樣子:

CASE 
    WHEN MyField = 'MyValue' THEN 'MyResult' 
    WHEN MyField = 'MyOtherValue' THEN 'MyOtherResult' 
    ELSE 'NoResult' 
    END 

無論如何表達必須有至少CASEWHENTHENENDELSE並非嚴格必要的 - 只是要注意,如果不包含它,則表達式將返回NULL,如果沒有滿足WHEN條件。

+0

案例表達,不是案例陳述... – jarlh

+0

嘿......謝謝,我會編輯。爲了不具體而爲我服務。 – AHiggins

0

你可以嘗試以下方法:

Declare @last_name varchar(10) = null; 
Select * from TABLE1 
Where FirstName = 'John' 
AND LastName = ISNULL(@last_name, LastName) 

您還可以使用COALESCE代替ISNULL了。

+0

如果LastName列爲NULL,該怎麼辦? – jarlh

+0

它不會影響查詢結果,除非您想將NULL放入@last_name並希望找到NULL姓。對於此問題,您可以更改查詢的where部分,如下所示:Where FirstName ='John' AND ISNULL(LastName,'')= ISNULL(@last_name,ISNULL(LastName,'')) –

相關問題