CTE не работают, если в запросе есть условие ЕСЛИ

Я пытаюсь добавить функциональность в мой запрос, чтобы выбрать, какой запрос будет выполняться при определенном условии.

DECLARE @Test VARCHAR(50)
    SET @Test = 'A'

;WITH A AS (
  Select 'A is Selected' as SELECTED),
      B AS (
  Select 'B is Selected' as SELECTED)

IF(@Test = 'A')
  select * from A

IF(@Test <> 'A')
  select * from B

Что касается моего примера кода теста выше, я получил:

Msg 319, уровень 15, состояние 1, строка 5
Неверный синтаксис рядом с ключевым словом "с". Если этот оператор является общим табличным выражением или предложением xmlnamespaces, предыдущий оператор должен заканчиваться точкой с запятой.

Msg 102, уровень 15, состояние 1, строка 8
Неверный синтаксис рядом с ','.

Может я что-то упустил?

2 ответа

Решение

Из WITH common_table_expression (Transact-SQL).

определяется в пределах области выполнения одного оператора SELECT, INSERT, UPDATE или DELETE.

Я думаю, вы хотите что-то подобное.

declare @Test varchar(50);
set @Test='A';

with A as
(
  select 'A is Selected' as SELECTED
),
B as
(
  select 'B is Selected' as SELECTED
)
select *
from A
where @Test = 'A'    
union all
select *
from B
where @Test = 'B';

Мне кажется, что вы должны просто поместить оба запроса в оператор IF следующим образом:

IF (@Test = 'A')
  select * from A
ELSE
  select * from B
Другие вопросы по тегам