1

数千行のリクエストの結果があり、それを 1 から 10,000 までの増分番号で、それぞれ 10,000 行の小さな一時テーブルに分割したいと考えています。25,000 の大きなクエリがあるとします。行、私が望むのは、それを 10k の 2 つのテーブルと 5k の 3 つ目のテーブルに分割することです。もちろん、分割する必要がある正確なページ数はわかりません。

すべての行を含む最初のクエリは [#DECLARATION] という名前で、ページ 1 の場合は 0、ページ 2 の場合は 1 など、9 までの番号 NumeroDeclaration があります。10,000 行ごとに、0 から 10,000 に増分されます。

この時点で、私のリクエストは次のようになります。

    --Page 1
    SELECT * INTO [#PAGE1] FROM [#DECLARATION] WHERE NumeroDeclaration =0 ORDER BY NumeroTransaction;
        --Numerotation
        WITH upd AS (SELECT NumeroDeclaration, ROW_NUMBER() OVER (ORDER BY NumeroTransaction) AS Numtemp FROM [#PAGE1])
        UPDATE upd SET NumeroDeclaration = Numtemp
    --Page 2
    SELECT * INTO [#PAGE2] FROM [#DECLARATION] WHERE NumeroDeclaration =1 ORDER BY NumeroTransaction;
        --Numerotation
        WITH upd AS (SELECT NumeroDeclaration, ROW_NUMBER() OVER (ORDER BY NumeroTransaction) AS Numtemp FROM [#PAGE2])
        UPDATE upd SET NumeroDeclaration = Numtemp
    --Page 3
    --etc.... to Page 10...

私はこれを10ページ以上しなければなりませんが、うまくいきますが、それを行うためのより短い/上品な方法はありますか?

私はSQL SERVER 2008を使用しています読んでくれてありがとう

4

1 に答える 1

2

なぜ小さなテーブルに分割する必要があるのか​​ 、単一の[#DECLARATION]テーブルでフィルターを使用できないのか、まだわかりません。

クエリは、[#DECLARATION]テーブルが列を介してページに既に分割されていることを意味しNumeroDeclarationます。

あなたができる

Declare @recordsPerPage AS int
SELECT @recordsPerPage = 10000;
SELECT
    *,
    ROW_NUMBER() OVER (PARTITION BY NumeroDeclaration ORDER BY NumeroTransaction ASC) AS Tempnum,
    NumeroDeclaration+1 AS Page
FROM numbered

pageこれにより、ページ列とTempnumページごとにリセットされる列が埋め込まれた結果セットが表示されます。

お役に立てれば

于 2012-10-23T17:02:08.613 に答える