2010-12-08 3 views
0

Моя проблема заключается в том, что я хочу объединить два SP в одном. скелет результирующего sp равен:TSQL: оператор if внутри оператора With

with Paging(RowNo, ID, Name, Description, LengthSeconds, Rating, Url, ThumbnailFileName, AddedAt) AS 
    (
    (if(@SortType is null) 
     begin 
     ... select ... 
     end 
     else 
     begin 
     ... select... 
     end 
    ) 

    select * from Paging ... 

Могу ли я это сделать Если в инструкции с инструкцией?

ответ

8

Нет ,,, это было бы что-то вроде

with Paging(RowNo, ID, Name, Description, LengthSeconds, Rating, Url, ThumbnailFileName, AddedAt) AS 
(
    select ... 

    WHERE @SortType is not null 
    UNION ALL 
    select ... 

    WHERE @SortType is null 
)... 

Если запрос является то, что простой, хотя, то вы бы не нужен КТР: он не добавляет readibility

+0

Как я могу выполнить подкачку без CTE? – 2010-12-08 11:19:33

0

Вы могли бы использовать union, где верхняя сторона соответствует первой половине if:

select ... 
where @SortType is null 
union all 
select ... 
where @SortType not null null 

if утверждение не допускается внутри запроса, только для контроля потока вокруг запросов. Таким образом, if внутри with не допускается.

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