1

我有一个请求的结果,它给了我数千行,我想将它拆分为每个 10k 行的小临时表,增量数从 1 到 10 000。假设我有一个 25 000 的大查询行,我想要的是将它分成 2 个 10k 的表和第三个 5k 的表。当然,我不知道我将不得不分成的确切页数。

我对所有行的第一个查询被命名为 [#DECLARATION] 并且有一个数字 NumeroDeclaration,第 1 页为 0,第 2 页为 1,等等。到 9。每 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 回答