2012-09-11 8 views
5

SQL Server 2012には、指定したページサイズとそのページに基づいて多数のレコードを取得するクエリがあります。これは次のようになります。オフセットをフェッチしてすべての行を取得する

 

SELECT LocID, LocName 
FROM Locations 
ORDER BY LocName OFFSET @PageNum ROWS 
FETCH NEXT @PageSize ROWS ONLY 
 

コードはかなりシンプルです。しかし、私がしなければならないことは、ページングを正しく返す関数にそれを置きます。しかし、私はこの関数からすべてのレコードを返す必要があるかもしれないので、オフセットやFETCHなしで関数を呼び出すオプションが必要です(ほとんどの場合、ページングを持たないレポートであり、まっすぐなデータでなければなりません) 。私はこれを行う良い方法を考えることができません。

+0

すべてのレコードを返すだけの大きさの '@ PageSize'を呼び出すだけではどうですか? –

+1

問題は、私がそれを実行した後まで、レコードセットがどれだけ大きくなるのか分かりません。私はその問題に似た何かについて別の質問をしました。 – CrystalBlue

+2

INTまたはBIGINTの上限は、 –

答えて

7

あなたが言うことができる:あなただけのすべての行をしたい場合は、両方のパラメータにNULLを渡す

@PageNum INT, 
@PageSize INT 

... 

SELECT @PageSize = COALESCE(@PageSize, 2000000000); 
-- 2 billion should be enough? 

... OFFSET (COALESCE(@PageNum, 1)-1)*@PageSize ROWS 
FETCH NEXT @PageSize ROWS ONLY; 

+0

これは私が他の人によって今のところ示唆されていることです。だから、これは最も有効な答えのようです。ありがとう! – CrystalBlue

関連する問題