如何在 SQL Server 中将数据分成一百份?

3
我想选择两个数字之间的数据,例如以下内容:
create proc Mysp_hundred
    @a int
as
    select * 
    from tblPhoneNumber
    where ROW_NUMBER() between @a * 100 and (@a + 1) * 100

如果我设置@a = 1,我应该得到100到200之间的行。

我该怎么做?


1
你正在使用哪个版本的SQL Server? - Ameya Deshpande
如果使用SQL Server 2012,请尝试使用OFFSET和FETCH。在这里演示:http://dbadiaries.com/new-t-sql-features-in-sql-server-2012-offset-and-fetch - Elliveny
1
如果它按照你的期望工作,该范围将返回多达101行。 - shawnt00
1个回答

3

使用子查询:

select t.*
from (select t.*, row_number() over (order by (select NULL)) as seqnum
      from tblPhoneNumber
     ) t
where seqnum between @a*100 and (@a+1)*100;

注意,SQL表格代表无序集合,因此应该使用order by指定数据的排序方式。事实上,您需要一个稳定的排序(没有重复键),这样每次获取的行都会不同。

该范围将返回最多101行。 - shawnt00
@shawnt00 . . . (1) 这是原始问题中的逻辑; (2) OP说“在100到200行之间”; (3) 我同意你更合理的构造应该是 `seqnum between @a*100 + 1 and (@a+1)*100'。 - Gordon Linoff
我并不是在说答案是错的。我只是向OP指出,它可能仍需要进行一些微调,因为我们所有人都很清楚这里的意图。 - shawnt00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接