mssql如何在没有select语句的情况下获取整个表的锁?

时间:2012-02-23 19:28:26

标签: sql-server-2005

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 

一旦事务完成或回滚,表上的锁是否自动释放?

1 个答案:

答案 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