我有以下代码,我怀疑。
Update Statement on Table 1
Update Statement on Table 2
Select Statement which include both the Table 1
现在上面的代码将返回到应用程序。意味着它获得了应用程序的所有功能。
我经常在应用程序中遇到死锁错误。
我有一百个用户一次获取同一个表。 所以我必须确保直到更新语句select语句的完成不会触发或如何锁定更新语句。
还有一个疑问,如果我想更新一行&另一个用户试图选择该表,然后他将获得死锁。 (用户试图选择另一行不在更新语句中。) 这种情况会发生什么。
请帮帮我。
提前致谢
答案 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;