使用MSSQL 2012为每个用户同时选择不同的记录

时间:2017-10-31 11:05:11

标签: sql sql-server-2012

我的网络应用程序有大约300个用户,他们在我想要显示记录的同时获取下一条记录,这样每个用户都有不同的记录(即它们之间没有重复记录)

并且获取的记录也希望将它们标记为已获取,因此在下一个获取批次中不应考虑它。

我不知道以下查询是否适合我。

SELECT TOP 1 * FROM [Table_name] ORDER BY NEWID();

1 个答案:

答案 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级别 - 您也可以更改存储过程中的隔离级别。