Sql server 2005 如何在操作期间锁定表
我想在执行存储过程时锁定一个表 这是个好办法吗Sql server 2005 如何在操作期间锁定表,sql-server-2005,Sql Server 2005,我想在执行存储过程时锁定一个表 这是个好办法吗 CREATE PROCEDUE sp_test @tableName nvarchar(128) AS DECLARE @sql nvarchar(MAX) = 'SELECT * FROM ' + @tableName + 'WITH TABLOCK' EXEC @sql -- DO my operations -- How Do I release the lock? or does it get release when the exe
CREATE PROCEDUE sp_test
@tableName nvarchar(128)
AS
DECLARE @sql nvarchar(MAX) = 'SELECT * FROM ' + @tableName + 'WITH TABLOCK'
EXEC @sql
-- DO my operations
-- How Do I release the lock? or does it get release when the execution is done
还是有更好的方法来实现这一点
谢谢您可以在过程调用开始时将表上的特定锁取出 如果要防止对表进行数据修改,可以使用IX锁
SET XACT_ABORT ON;
BEGIN TRAN
SELECT * FROM <<TABLENAME>> WITH(UPDLOCK, SERIALIZABLE) WHERE 1=0;
-- DO STUFF
SELECT * FROM sys.dm_tran_locks WHERE request_session_id = @@spid;
COMMIT TRAN
如果要阻止任何其他进程访问数据,可以使用X锁。当然,这并不能阻止任何未提交的读取
SET XACT_ABORT ON;
BEGIN TRAN
DELETE FROM <<TABLENAME>> WITH(XLOCK, TABLOCK, SERIALIZABLE) WHERE 1=0;
-- DO STUFF
SELECT * FROM sys.dm_tran_locks WHERE request_session_id = @@spid;
COMMIT TRAN
当事务提交/回滚时,锁被释放 我并不是说您不需要这个,但是如果进程经常被命中,我希望会发生严重的锁争用。你能详细说明你为什么需要它吗?它不应该经常被点击,很可能是一次。我们有一个存储过程,可以对特定表进行更改跟踪。当调用该过程时,我们要锁定表,这样就没有人可以在表上执行DML操作。一旦程序完成,我们要释放锁。执行该过程不会花费很长时间。对于X锁,为什么要执行删除?你不能做一个选择吗?