我发现SQL Server 2012中分页的最佳方法是OFFSET FETCH子句
SELECT First Name + ' ' + Last Name
FROM Employees
ORDER BY First Name OFFSET 10 ROWS;
它工作正常。
现在就我而言,我的软件动态生成SQL Server表,我只知道表名。
我不知道动态生成的表中的列名。
现在在这种情况下,这种分页是如何工作的?因为我不知道哪一列应该与带有 OFFSET Fetch 子句ORDER BY
子句一起使用。
有什么替代解决方案吗?
谢谢
如果有帮助,您可以按列索引排序:
SELECT First Name + ' ' + Last Name
FROM Employees
ORDER BY 1 OFFSET 10 ROWS;
这将按第一列排序。如果排序列存储在 UI 上(由用户控制),则需要将列索引存储在 UI 上,并将其传递给 SQL Server 以在排序中使用。
如果只想按记录添加到表中的顺序进行排序,则需要主键标识列。确保这是表上的第一列并使用 ORDER BY 1
。
正如@Tanner在他的答案中提到的,为了使用他的答案,您必须将标识列作为查询的第一列,如果可以这样做,请使用他的答案,但如果不能,请使用(SELECT NULL)
而不是1
,例如:
SELECT First Name + ' ' + Last Name
FROM Employees
ORDER BY (SELECT NULL) OFFSET 10 ROWS;