可以修改此查询以包含偏移吗?

时间:2017-03-23 21:27:05

标签: sql

目前使用带有一些基本VBA的Excel表单在最终用户和SQL表之间传递数据。我遇到了一些问题,用户可能希望跳过他们正在呈现的记录,然后获取下一个。因为我有3个用户(当前)共享数据,所以我需要确保A人和B人互不冲突。我这样做是通过将状态字段更新为" LOCKED"一旦用户A收到她的数据。

无论如何,我一直试图弄清楚OFFSET是如何运作的,但是运气不好。

声明的删节版本:

Select top 1 ID,Query,Status from mydb.mytable where status = 'NEW' order by Priority desc 

这给了我NEW状态下的最高优先级记录。第二个声明用于更新" NEW"到"已锁定"

但是如果用户无法处理记录,那么她需要一个不同的记录。我认为下面的内容会起作用,但我无法让它发挥作用。

Select top 1 ID,Query,Status from mydb.mytable where status = 'NEW' order by Priority desc offset 5;

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

根据MSDN

  

TOP不能在同一查询中与OFFSET和FETCH组合使用   表达式(在同一查询范围内)。

假设您使用的是SQL Server 2012或更高版本,则可以使用此功能。

SELECT ID, Query, Status FROM mydb.mytable 
WHERE status = 'NEW' 
ORDER BY Priority DESC
OFFSET 5 ROWS
FETCH NEXT 1 ROW ONLY;

FETCH NEXT 1 ROW ONLY将为您提供偏移后的第一行,这相当于您通过TOP 1获得的内容。