2017-02-22 561 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语句...... –