2
UPDATE dbo.A  
  SET StatusCode = 'booked' 
   , UpdateDate = GETDATE()
 OUTPUT INSERTED.id INTO @TableVar
 WHERE id = ( 
     SELECT TOP 1 wq.id
     FROM dbo.A AS wq
     WHERE wq.statusCode = 'Claimed' and wq.id = 2

)

idが2に等しく、statusCodeが「Claimed」から「booked」に更新される更新テーブルAが必要です。

スレッドセーフですか?tks

4

1 に答える 1

5

with (updlock, holdlock)サブクエリに追加することで、同時実行の安全性を向上させることができます。

FROM dbo.A AS wq with (updlock, holdlock)

同等のことは、ステートメントをrepeatable readトランザクションでラップすることです。

REPEATABLE READ
Specifies that statements cannot read data that has been modified but not yet 
committed by other transactions and that no other transactions can modify data 
that has been read by the current transaction until the current transaction 
completes.

これは次のようになります。

set transaction isolation level repeatable read
start transaction
... your query here ...
commit transaction
于 2012-08-24T12:58:57.630 に答える