我正在使用MS SQL Server,我有一个表。我希望每个SQL Server客户端获取一行并更新它,以便客户端知道只有他获得了该记录,而没有其他人!
record1 a b c 0
record2 d e f 0
...
一个客户端应该从0到1获取并更新最后一个值。
该解决方案至少应该适用于SQL Server 2005及更高版本。
ATOMIC
{
select top 1 * from table where column='0' // get one row where column is '0'
update table set column='1'
}
答案 0 :(得分:2)
您可以执行以下操作:
update top (1) table with (readpast)
set Column1=1
output inserted.*
where Column1 = 0
哪个应该一气呵成。您只需要readpast
提示,如果获取了唯一值,则连接会使交易长时间保持打开状态。如果你只是进行更新,你可以省略它。
答案 1 :(得分:0)
您可以通过公用表表达式更新表。
下面我创建一个CTE,只选择一行,然后在UPDATE中使用。
WITH
singleRow AS
(
select top 1 * from table where column='0'
)
UPDATE
singleRow
SET
column= '1'
;
注意: 请务必确保使用;
终止前面的任何命令,否则WITH
语法不起作用。