我们假设有一个SQL Server 2008表,如下所示,它拥有1000万行。 其中一个字段是Id,因为它的身份是1到1千万。
CREATE TABLE dbo.Stats
(
id INT IDENTITY(1,1) PRIMARY KEY,
field1 INT,
field2 INT,
...
)
通过执行一个select语句来获取满足以下要求的数据子集是否有效:
因此,在我们的示例中,如果我们返回100行,结果集将如下所示:
Row 1 - 100 000
Row 2 - 200 000
Row 3 - 300 000
...
Row 100 - 10 000 000
我想避免使用游标并将其存储在单独的表中。
答案 0 :(得分:2)
不确定效率将如何,但是以下查询将返回每第100000行(相对于id
建立的排序):
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY id) RN
FROM Stats
) T
WHERE RN % 100000 = 0
ORDER BY id
由于它不依赖于实际的id
值,即使您在id
值的序列中有“漏洞”,这也会有效。
答案 1 :(得分:1)
这样的东西?
SELECT id FROM dbo..Stats WHERE id % 100000 = 0
它应该可以工作,因为你说id从1到10 000 000.如果行数不知道,但结果行的数量是你所知道的,那么只计算那个100000的数字(如果你愿意的话)比如100个结果行:
SELECT id FROM Stats WHERE (id % (SELECT COUNT(id) FROM Stats) / 100) = 0