目前使用带有一些基本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;
感谢您的帮助!
答案 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
获得的内容。