我想执行更新,然后选择结果。在发生选择之后,我不希望任何东西能够更新我正在更新的行。我该怎么做?
我的目标是增加一行的值并返回该增量值。到目前为止,我发现我最终遇到一个问题,即更新(增加)后面的选择,在两个查询几乎同时发生选择似乎返回相同数字的情况下。所以我猜测像更新>更新>选择>选择正在发生。
我错过了将其标记为SQL Server 2005.我实际上正在使用Server 2000.因此输出子句不起作用(不在该版本中)。
BEGIN TRANSACTION
UPDATE Table SET Last=(Last+1) WHERE ID=someid;
SELECT * FROM Table WHERE ID=someid;
COMMIT TRANSACTION
答案 0 :(得分:3)
BEGIN TRAN
UPDATE ...
SELECT...
COMMIT
即使在read committed的默认事务隔离级别也应该这样做。
您还可以使用OUTPUT子句在更新后直接返回行。这个例子
UPDATE <YourTable>
SET ...
OUTPUT INSERTED.*
WHERE ...