我想,也許你正在做的事情,如:
declare @id int, @phone varchar(20), @name varchar(100)
select top (1) @id = id, @phone = phone, @name = name
from People
where status = 'awaiting'
update People
set status = 'in_process'
where id = @id --previously grabbed
--- etc.
它是不是安全的,因爲一些其他的過程中也可以將您的更新語句
之前選擇相同的記錄在這種情況下,你可以的使用update
語句(或delete
,這取決於你的邏輯)與output條款
declare @person table (id int, phone varchar(20), name varchar(100))
update top (1) p
set status = 'in_process'
output inserted.id, inserted.phone, inserted.name into @person
from People p
where status = 'awaiting'
能否請你分享更多一點有關詳細信息:_I在寫入字段時寫入記錄以表明它已鎖定._ –
對不起,犯了一個語法錯誤。就是說我選擇了一條記錄,然後更新該記錄上的一個字段以表明它已被鎖定。 – Photovor