Объединение всех с if / else T-SQL - PullRequest
3 голосов
/ 26 ноября 2010

Мне было интересно, как я могу получить UNION ALL с оператором IF / ELSE.

Например:

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

Я получаю синтаксическую ошибку.

Ответы [ 2 ]

15 голосов
/ 26 ноября 2010
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 ;
3 голосов
/ 26 ноября 2010

Ну, один из способов сделать это - использовать динамический 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...