如何锁定事务,直到单个查询完成其执行,以防止出现死锁错误

时间:2016-04-28 07:44:44

标签: sql sql-server sql-update database-deadlocks

我有以下代码,我怀疑。

Update Statement on Table 1

Update Statement on Table 2

Select Statement which include both the Table 1 

现在上面的代码将返回到应用程序。意味着它获得了应用程序的所有功能。

我经常在应用程序中遇到死锁错误。

我有一百个用户一次获取同一个表。 所以我必须确保直到更新语句select语句的完成不会触发或如何锁定更新语句。

还有一个疑问,如果我想更新一行&另一个用户试图选择该表,然后他将获得死锁。 (用户试图选择另一行不在更新语句中。) 这种情况会发生什么。

请帮帮我。

提前致谢

1 个答案:

答案 0 :(得分:1)

你应该使用交易,

    BEGIN TRANSACTION [Tran1]

    BEGIN TRY

    Update Statement on Table 1
    Update Statement on Table 2
    Select Statement which include both the Table 1     

    COMMIT TRANSACTION [Tran1]

    END TRY
    BEGIN CATCH
      ROLLBACK TRANSACTION [Tran1]
    END CATCH  

    GO

如果您不希望任何人更新/删除该行,我会使用SELECT语句中的UPDLOCK。这表示您将很快更新同一行,例如

select @Bar = Bar from oFoo WITH (UPDLOCK) where Foo = @Foo;