2010-12-08 18 views
0

私の問題は、2つのSPを1つにマージしたいということです。結果のspのスケルトンは次のとおりです。TSQL: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

問い合わせはしかし、その後、あなたはCTEをシンプル必要がないということである場合はありません,,,それは

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

ようなものになるだろう:それは

+0

CTEなしでページングを行うにはどうすればよいですか? –

+1

CTEにOVER句 "ROW_NUMBER()OVER(ORDER BY ...)"を追加し、行番号に対してページ間に "0126"を追加することでページングを行うことができます – IamIC

+1

SQL Server 2011では、しかし、 'OVER'節で次/前の行を参照することはできません。 –

0

任意のreadibilityを追加しませんあなたは可能性があり

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

if文は、クエリ内で許可されていない、のみ:トップ側はifの前半に対応unionを使用クエリの前後のフローを制御します。したがって、withの中のifは許可されません。

関連する問題