MSSQL 2005。我希望在事务开始时锁定表,并且只在事务结束时释放它
BEGIN TRANSACTION;
-- get lock
BEGIN TRY
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 BEGIN
ROLLBACK TRANSACTION;
-- release lock
END
END CATCH;
IF @@TRANCOUNT > 0 BEGIN
COMMIT TRANSACTION;
-- release lock
END
GO
一旦事务完成或回滚,表上的锁是否自动释放?
答案 0 :(得分:1)
表锁或其他类型的锁可以使用如下提示设置:
UPDATE Users WITH (TABLOCK) SET Username = 'fred' WHERE Username = 'foobar'
锁定通常会在命令完成时到期(即使事务尚未完成),除非您添加其他提示以使其保持在事务范围内。有关所有锁类型和其他表提示的说明,请参阅http://msdn.microsoft.com/en-us/library/ms187373%28v=sql.90%29.aspx。
锁定会影响其他用户,具体取决于他们自己的事务的隔离级别。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms173763%28v=sql.90%29.aspx。