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



我有以下代码,我对此表示怀疑。

Update Statement on Table 1
Update Statement on Table 2
Select Statement which include both the Table 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;

最新更新