SQL Server 2012 - 无顺序子句的分页



我发现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; 

最新更新