2010-11-26 45 views
3

我在想如何使用IF/ELSE語句來創建一個UNION ALL。聯合所有使用if/else T-SQL

例如:

SELECT * FROM A 
UNION ALL 
SELECT * FROM B 
UNION ALL 

IF @type = 1 
    BEGIN 
     SELECT * FROM C 
    END 
ELSE 
    BEGIN 
     SELECT * FROM D 
    END 

UNION ALL 

SELECT * FROM E 

我得到的語法錯誤。

回答

14
SELECT * FROM A 
UNION ALL 
SELECT * FROM B 
UNION ALL 
SELECT * FROM C WHERE @type = 1 
UNION ALL 
SELECT * FROM D WHERE @type <> 1 OR @type IS NULL 
UNION ALL 
SELECT * FROM E ; 
2

一個好辦法做到這一點是使用動態SQL

先建的查詢字符串,然後執行它。這樣,你有完全的控制

declare query nvarchar(max) 
set query = 'SELECT * FROM A 
      UNION ALL 
      SELECT * FROM B 
      UNION ALL ' 

IF @type = 1 
BEGIN 
set query = query + ' 
      SELECT * FROM C' 
END 
ELSE 
BEGIN 
set query = query + ' 
      SELECT * FROM D' 
END 
set query = 'UNION ALL 
      SELECT * FROM E' 

exec(query) 
+0

-1動態SQL一般是*壞*主意 – gbn 2010-11-26 20:10:06

+0

還好現在是多餘的 - 我提到這是做的一種方式,並能正常工作。只有當您通過連接參數而不進行消毒來讓sql注入攻擊發生時,動態sql纔是不好的。 – 2010-11-26 20:13:27