代码之家  ›  专栏  ›  技术社区  ›  aepheus

SQL Server 2005,选择并更新已锁定

  •  2
  • aepheus  · 技术社区  · 16 年前

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

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

    我想把它标记为SQL Server 2005。我实际上在使用Server2000。因此输出子句不工作(不在该版本中)。

    BEGIN TRANSACTION
    UPDATE Table SET Last=(Last+1) WHERE ID=someid;
    SELECT * FROM Table WHERE ID=someid;
    COMMIT TRANSACTION
    
    1 回复  |  直到 14 年前
        1
  •  3
  •   Martin Smith    16 年前
    BEGIN TRAN
    UPDATE ...
    SELECT...
    COMMIT 
    

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

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

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