[英]SQL WHERE Clause with CASE
嘗試設置一個SQL存儲過程,如果傳遞給它的變量等於關鍵字“ All”,它將否定WHERE子句中的“ PlatformName”列,並返回PlatformName中的所有內容和@Title中的變量。
我的SQL代碼如下。
WHERE PlatformName = CASE @Platform
WHEN 'All' THEN ''
ELSE @Platform
END
AND Title LIKE '%' + @Title + '%'
”不返回任何內容。
Table PlatformName Title XBox 360 Foobar PS3 Foobar
准確執行您要嘗試執行的操作的一種方法是:
WHERE PlatformName = CASE @Platform
WHEN 'All' THEN PlatformName
ELSE @Platform
END
AND Title LIKE '%' + @Title + '%'
您將看到使用的另一種常見方式是:
WHERE (PlatformName = @Platform OR @Platform = 'All')
AND ...
我建議測試它們的性能。
只是做這樣的事情:
WHERE ((PlatformName = @Platform) OR (@Platform = 'All'))
注意:如果要在查詢中進行聯接,則將其添加到聯接中可能會提高性能。 例如
SELECT *
FROM Games G
JOIN Platform P ON G.pID = P.pID AND ((PlatformName = @Platform) OR (@Platform = 'All'))
這樣,減少了對Platform表的掃描,查詢將更快。
語法正確,我在SQL Server數據庫上嘗試了該語法,並與以下查詢一起使用:
SELECT * FROM CNT
WHERE CP_NOM = CASE CP_COD WHEN 2824 THEN 'NOMBRE' END AND CP_COD > 10
錯誤可能與變量@Platform或@Title的值有關。
無論如何,您都可以將空平台字段(PlatformName ='')的值替換為'All',這樣可以使查詢更容易
WHERE PlatformName = @Platform AND Title LIKE '%' + @Title + '%'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.