我发现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
子句一起使用。
任何替代解决方案?
由于
答案 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;