这个分页选择查询究竟如何工作?

时间:2014-03-13 12:32:10

标签: sql sql-server database select rdbms

我是微软 SQL Server 的新手,而我对数据库不是很了解。

我对此查询有疑问(在我正在处理的Web应用程序的代码中执行):

SELECT * FROM VulnerabilityAlertDocument WHERE (1=1) ORDER BY Published DESC OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;

根据我的理解,这将返回我表中10行的所有字段(根据Published列的值以降序排序)

因此,在我的Web应用程序中,它用于获取一些分页视图。

例如,我有一个视图,向我展示一个表,在开头包含前10个记录,然后我可以点击"下一个"按钮,再次执行查询,我显示11到20之间的记录,所以再次......

我的疑问是:如果我在第一次获得前10条记录时将此查询执行到 Microsoft SQL Manager Stusio ,但如果我再次尝试执行它,我就不会获得10到20之间的记录,但我再次获得前10个记录?

1 个答案:

答案 0 :(得分:1)

您可以在MSDN上找到关于SQL Server语法的非常好的文档:http://technet.microsoft.com/en-us/library/gg699618.aspx

简而言之,OFFSET 0 ROWS表示从第0行开始,如果您将偏移量设置为10,那么您将获得下一组10行:

SELECT * FROM VulnerabilityAlertDocument WHERE (1=1) ORDER BY Published DESC OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;

SQL Server无法跟踪您查询的行,这取决于您。