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