分解 SQL 中的值



如果我尝试一次性获取数据,我有数百万个数据。要得到相同的结果需要很多时间。我是否可以将值分解为前 100 个值,然后我想查看 101 到 200 个值。我们可以在 SQL 中使用该选项来编写该查询吗?

如果我理解正确,您似乎想要获取 n 行,这些行不一定位于任何特定顺序的开头或结尾,而是位于中间的某个地方。这也是"分页"的基础 - 例如,获取 N 行,然后获取接下来的 N 行,依此类推。您可以使用 CTE 执行此操作,ROW_NUMBER()如下所示:

DECLARE @Start INT = 101;
DECLARE @End INT = 200;
WITH cte AS
(
    SELECT Column1, Column2, Column3, ROW_NUMBER() OVER(ORDER BY <some criteria>) AS RowNumber
    FROM YourTable
)
SELECT Column1, Column2, Column3
FROM cte 
WHERE RowNumber > @Start
AND RowNumber < @End

如果你想让它成为一个存储过程,你可以传入我在顶部声明的变量 - 显然你会传递 1 和 100 来获取前 100 行,101 和 200 来获得接下来的 100 行,依此类推(您可能需要调整底部的范围条件,具体取决于您是否想要在一端范围包含/包含

(。

通常称为paginationpaging。正如 Bridge 在他们的回应中指出的那样,您可以通过 ROW_NUMBER() 来实现这一点,但也有各种其他机制。

我非常喜欢 Remus Rusanu 在这里的键集解决方案,它建议它比基于行数的解决方案更快,因为"......因为他们(行计数(总是必须对记录进行计数才能定位自己,而不是像关键集那样直接寻找位置。

我还没有看到任何比较这两种机制的硬数据和快速数据,但也许您可以在解决方案中调查和报告;)

最新更新