SQL Server 2012 - 没有订单条款的分页

时间:2014-12-02 10:46:30

标签: sql sql-server

我发现SQL Server 2012中分页的最佳方法是OFFSET FETCH Clause

SELECT First Name + ' ' + Last Name 
FROM Employees 
ORDER BY First Name OFFSET 10 ROWS;

工作正常。

现在在我的情况下,我的软件动态生成SQL Server表,我只知道表名。

我不知道动态生成的表中的列名。

现在在这种情况下这个分页是如何工作的?因为我不知道哪个列应该与带有OFFSET Fetch子句的ORDER BY子句一起使用。

任何替代解决方案?

由于

2 个答案:

答案 0 :(得分:3)

如果有帮助,您可以按列索引排序:

SELECT First Name + ' ' + Last Name 
FROM Employees 
ORDER BY 1 OFFSET 10 ROWS; 

这将按第一列排序。如果排序列存储在UI上(由用户控制),则需要在UI上存储列索引并将其传递给SQL Server以在排序中使用。

如果您只是想按订单顺序将记录添加到表中,则需要一个主键,标识列。确保这是表格中的第一列,并使用ORDER BY 1

答案 1 :(得分:0)

正如{Tanner在his answer中提到的那样,要使用他的答案,您必须将“身份”列作为查询的第一列,如果可以的话,请使用他的答案,但是如果不能,使用(SELECT NULL)代替1,例如:

SELECT First Name + ' ' + Last Name 
FROM Employees 
ORDER BY (SELECT NULL) OFFSET 10 ROWS;