mssql如何在不使用select语句的情况下锁定整个表



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了解更多信息。

最新更新