2017-02-22 555 views
1

無法找到一個適當的例子(或者我只是看錯方向)。如何在WITH中使用IF語句?

根據傳入參數值,我需要更改WHERE條件SELECT

例如,我買了價值「所有」參數@bookType,我需要做這樣的事情:

IF @bookType = 'All' 
    SELECT * FROM tBooks 
    WHERE BookType != 'Template' AND BookGroup='Library' 
ELSE 
    SELECT * FROM tBooks 
    WHERE BookType = @bookType AND [email protected] 

看似簡單,但我需要這個IF內側:

WITH Books AS (
    IF... 
    ... 
), bookIds AS (
    ... 
    ... 
) 

這不起作用,因爲我開始收到'Incorrect syntax near IF'。我究竟做錯了什麼?或者,也許有可能隱藏 WHERE語句(根據參數值更改)?

+1

標記您正在使用的dbms。 (該代碼是特定於產品的。) – jarlh

+0

已更新的標籤(mssql,以及標籤將其更改爲sql server) –

回答

4
; 
WITH Books AS (

    SELECT * FROM tBooks 
     WHERE 
      (@BookType = 'All' AND BookType != 'Template' AND BookGroup='Library') 
      OR 
      (@BookType <> 'All' AND BookType = @bookType AND [email protected]) 

) 
+0

噢...甚至沒有想過這個變體...將嘗試它 –

+0

是......完成了招。現在我感到非常愚蠢,甚至沒有考慮擴展WHERE語句...... –