我的网络应用程序有大约300个用户,他们在我想要显示记录的同时获取下一条记录,这样每个用户都有不同的记录(即它们之间没有重复记录)
并且获取的记录也希望将它们标记为已获取,因此在下一个获取批次中不应考虑它。
我不知道以下查询是否适合我。
SELECT TOP 1 * FROM [Table_name] ORDER BY NEWID();
答案 0 :(得分:0)
您不需要ORDER BY
- 只需使用TOP 1
- SQL Engine将按行排序(例如使用索引):
BEGIN TRAN;
DECLARE @TableId INT;
Select top 1 @TableId = TableId
from MyTable
where Fetched=0;
Update myTable
set Fetched=1
WHERE TableId = @TableId;
COMMIT TRAN;
SELECT *
FROM myTable
WHERE TableId = @TableId;
您可以将整个语句包装在事务中并检查数据库的isolation级别 - 您也可以更改存储过程中的隔离级别。