只有當變量有數據時,我纔想添加條件到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
只有當變量有數據時,我纔想添加條件到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
Select * from TABLE1
where FirstName = 'John'
AND (@last_name IS NULL OR LastName = @last_name)
其他人已經發布更好的方法來寫你試圖表達的邏輯,但爲了以防萬一,你需要使用CASE
語法在未來,記住語法要求你包括字END
。這告訴SQL表達式完成的地方。
這是一個基本的CASE
表情會是什麼樣子:
CASE
WHEN MyField = 'MyValue' THEN 'MyResult'
WHEN MyField = 'MyOtherValue' THEN 'MyOtherResult'
ELSE 'NoResult'
END
無論如何表達必須有至少CASE
,WHEN
,THEN
和END
。 ELSE
並非嚴格必要的 - 只是要注意,如果不包含它,則表達式將返回NULL
,如果沒有滿足WHEN
條件。
你可以嘗試以下方法:
Declare @last_name varchar(10) = null;
Select * from TABLE1
Where FirstName = 'John'
AND LastName = ISNULL(@last_name, LastName)
您還可以使用COALESCE代替ISNULL了。
如果LastName列爲NULL,該怎麼辦? – jarlh
它不會影響查詢結果,除非您想將NULL放入@last_name並希望找到NULL姓。對於此問題,您可以更改查詢的where部分,如下所示:Where FirstName ='John' AND ISNULL(LastName,'')= ISNULL(@last_name,ISNULL(LastName,'')) –
這是您正在使用的案例表達式,而不是case語句! – jarlh