2011-01-19 30 views
1

SQL Server 2000のDBには非常に肉体的なストアドプロシージャがあり、単一の結果セットを返します。私はオリジナルのSPに触れたくはないが(許可されていない)、返されたレコードに改ページを追加したい。結果セットのSQL Serverページング

返された結果セットを受け取り、XからYまでの行しか与えない別のSPでこのSPをラップすることはできますか?

答えて

2
create procedure ProcWrap 
as 

declare @T table (ID int, Name nvarchar(50)) 

insert into @T 
exec ProcToWrap 

select * 
from @T 
where ID < 10 

編集1 は、上のテストするためにSQL Server 2000をお持ちでないし、私は、利用可能なテーブル変数場合は覚えていません。ここでは、代わりに一時テーブルを使用する手順です。改ページに使用できるRowNum ID列を追加しました。

create procedure ProcWrap2 
as 

create table #T (RowNum int identity, ID int, Name nvarchar(50)) 

insert into #T 
exec ProcToWrap 

select * 
from #T 
where RowNum between 10 and 19 

drop table #T 

編集2 この場合ProcToWrapからの出力は、列IDと名前です。 RowNumは自動的に生成されます。

+0

を議論記事へのリンクは正確に:)それは私が – BvdVen

+0

どのようにして、結果セットの2ページ目以降を返す意味何ですか?または、Andyが尋ねたように、 – Tony

+0

select * from (RowIndex、* from @T)でRow_Number()を選択します(userIDで注文します)。 ここで、Sub.RowIndex> = XおよびSub .RowIndex BvdVen

1

SPから結果を取得して一時テーブルに格納し、そのテーブルからXの結果を選択することができます。

1

他の人は、プロシージャの結果をテンポラリテーブルに配置し、そこから必要な行を選択する必要があると述べている人もいます。

あなたが​​機能を使用する必要がある行のセットを検索結果から取得するには:

SELECT 
    ROW_NUMBER() OVER (ORDER BY ID) AS row_number, * 
FROM 
    Your_Temp_Table 
WHERE row_number BETWEEN 11 AND 20 -- For the second page of results with 10 per page. 

EDIT:ちょうどあなたがしませんSQL Server 2000を使用している実現ありますROW_NUMBER()、申し訳ありません

EDIT2:あなたはarですクエリの結果をテンポラリテーブルに格納すると、その結果セットにインクリメント整数フィールドを追加し、それをROW_NUMBER()のシミュレーションとして使用して、必要な行を選択することができます。

EDIT3:はここpagination in SQL Server 2000

関連する問題