SQL Server 2005和SELECT和UPDATE已锁定

时间:2010-06-07 22:11:33

标签: sql select locking sql-update

我想执行更新,然后选择结果。在发生选择之后,我不希望任何东西能够更新我正在更新的行。我该怎么做?

我的目标是增加一行的值并返回该增量值。到目前为止,我发现我最终遇到一个问题,即更新(增加)后面的选择,在两个查询几乎同时发生选择似乎返回相同数字的情况下。所以我猜测像更新>更新>选择>选择正在发生。

我错过了将其标记为SQL Server 2005.我实际上正在使用Server 2000.因此输出子句不起作用(不在该版本中)。

BEGIN TRANSACTION
UPDATE Table SET Last=(Last+1) WHERE ID=someid;
SELECT * FROM Table WHERE ID=someid;
COMMIT TRANSACTION

1 个答案:

答案 0 :(得分:3)

BEGIN TRAN
UPDATE ...
SELECT...
COMMIT 

即使在read committed的默认事务隔离级别也应该这样做。

您还可以使用OUTPUT子句在更新后直接返回行。这个例子

UPDATE <YourTable>
   SET ...
OUTPUT INSERTED.*
 WHERE ...