2014-03-05 2 views
0

Я использую SQL Server 2012 и пытаюсь запустить 3 отдельных оператора в CTE.Таблица CTE ... с использованием оператора CASE для его заполнения

Что-то вроде:

WITH C1 AS 
(
    if (@Param = 1) 
     SELECT Field1, Field2 FROM TableA 
    else if (@Param = 2) 
     SELECT Field1, Field2 FROM TableB 
    else 
     SELECT Field1, Field2 FROM TableC 
), 
C2 AS 
    Select xxxxx 

Но это не компилируется.

Это что-то возможно ??

+0

возможно дубликат [? Если еще в КТР] (http://stackoverflow.com/questions/2907344/if-else- in-cte) –

+0

@RegisteredUser .. кажется, это дубликат. Спасибо за передачу ссылки, она дает очень интересные ответы. –

ответ

1

Нет, общие выражения таблицы не поддерживают, если блокировки else. Общие выражения таблицы - это в основном встроенные представления.

2

Вы можете изменить свой Select для КТР работать так:

WITH C1 AS 
(

     SELECT Field1, Field2 FROM TableA WHERE @Param = 1 
    UNION ALL 
     SELECT Field1, Field2 FROM TableB WHERE @Param = 2 
    UNION ALL 
     SELECT Field1, Field2 FROM TableC WHERE @Param <> 1 and @Param <> 2 
), 
C2 AS 
    Select xxxxx 
+0

Интересно ... Я попробую! –

+0

Предполагая, что выбор является более сложным, было бы поражение производительности запуском Union All, ..или SQL достаточно умен, чтобы знать, что @Param - это первое, что нужно проверить? –

+2

Я не знаю ответа, дайте ему попробовать. В общем, я обнаружил, что использование временных таблиц вместо CTE часто обеспечивает значительное увеличение скорости запросов. Я уверен, что есть встречные примеры, но это был мой опыт. –

Смежные вопросы