【SQL Server】笔记-查看表是否被锁并解锁表

前言

最近遇到一个问题:笔者想要清空某个表,发现无论是DELETE还是TRUNCATE命令都无响应。而SELECT命令则能正常快速响应,且表中也就区区几千行数据。不用说,肯定是发生了锁表。这里作为笔记来记录一下解锁过程

1、确认锁表

SELECT request_session_id [pid], t.name AS [tableName], l.*
FROM   sys.dm_tran_locks l
LEFT JOIN sys.tables t ON t.object_id = l.resource_associated_entity_id
WHERE l.resource_type='OBJECT'
  AND t.name = 'MyTable'
--  AND l.resource_associated_entity_id = OBJECT_ID('dbo.MyTable')

脚本中最后两行都用于筛选指定表,只用其一即可

2、解锁

DECLARE @pid INT = 119; --锁表进程ID
DECLARE @sql VARCHAR(200)
SET @sql='KILL '+CAST(@spid AS VARCHAR(100))
EXEC(@sql);

友情提示:通过解锁杀进程是最简单粗暴的方式,笔者是在开发环境中使用这种方式。在生产环境中还是要先确认杀进程的影响,确保风险可控。

posted @ 2022-06-02 09:39  Theo·Chan  阅读(532)  评论(0编辑  收藏  举报