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
一旦事务完成或回滚,表上的锁会自动释放吗?
表锁或其他类型的锁可以使用以下提示设置:
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了解更多信息。