SQL Server 2000のDBには非常に肉体的なストアドプロシージャがあり、単一の結果セットを返します。私はオリジナルのSPに触れたくはないが(許可されていない)、返されたレコードに改ページを追加したい。結果セットのSQL Serverページング
返された結果セットを受け取り、XからYまでの行しか与えない別のSPでこのSPをラップすることはできますか?
SQL Server 2000のDBには非常に肉体的なストアドプロシージャがあり、単一の結果セットを返します。私はオリジナルのSPに触れたくはないが(許可されていない)、返されたレコードに改ページを追加したい。結果セットのSQL Serverページング
返された結果セットを受け取り、XからYまでの行しか与えない別のSPでこのSPをラップすることはできますか?
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は自動的に生成されます。
SPから結果を取得して一時テーブルに格納し、そのテーブルからXの結果を選択することができます。
他の人は、プロシージャの結果をテンポラリテーブルに配置し、そこから必要な行を選択する必要があると述べている人もいます。
あなたが機能を使用する必要がある行のセットを検索結果から取得するには:
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
を議論記事へのリンクは正確に:)それは私が – BvdVen
どのようにして、結果セットの2ページ目以降を返す意味何ですか?または、Andyが尋ねたように、 – Tony
select * from (RowIndex、* from @T)でRow_Number()を選択します(userIDで注文します)。 ここで、Sub.RowIndex> = XおよびSub .RowIndex
BvdVen