[SQL]SQL Server 锁表
-- 查看被锁表:
SELECT
request_session_id spid, -- 锁表进程
OBJECT_NAME(resource_associated_entity_id) tableName -- 被锁表名
,*
FROM sys.dm_tran_locks
WHERE resource_type='OBJECT'
-- 解锁
DECLARE @spid INT
SET @spid = 52 --锁表进程
DECLARE @sql VARCHAR(1000)
SET @sql='kill '+CAST(@spid AS VARCHAR)
EXEC(@sql)
解锁就是结束该进程,如果改进程被终止,SQL Server 会有一个报错信息。
消息 10054,级别 20,状态 0,第 0 行
在从服务器接收结果时发生传输级错误。 (provider: TCP Provider, error: 0 - 远程主机强迫关闭了一个现有的连接。)
完成时间: 2021-08-10T09:31:40.0030077+08:00
SQL Server 在执行查询语句时会锁表。在锁表期间禁止增删改操作。
如果不想锁表,那就再表名或别名后面加上 WITH(NOLOCK)
如下所示:
SELECT * FROM TableName WITH(NOLOCK) WHERE Id = 1