我有一个请求的结果,它给了我数千行,我想把它分成几个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感谢阅读
答案 0 :(得分: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
列的结果集,该列将为每个页面重置。
希望这有帮助