TSQL:如果语句在With语句中

时间:2010-12-08 10:25:54

标签: sql sql-server tsql

我的问题是我想合并两个SP。产生的sp的骨架是:

 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 ... 

如果在with语句中,我可以这样做吗?

2 个答案:

答案 0 :(得分: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
)...

如果查询很简单,那么您就不需要CTE:它不会添加任何可读性

答案 1 :(得分:1)

您可以使用union,其中上边对应if的前半部分:

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

查询中不允许使用if语句,只能控制查询流。因此,if内的with是不允许的。