簡體   English   中英

帶案例的SQL WHERE子句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM