我有以下代码,我对此表示怀疑。
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;