sqlServer锁表和解锁

前言

项目开发过程中遇到一个问题,数据库中其他表都能正常crud,但是其中一个表无法crud,第一感觉就是可能是锁表了,下面记录下如果解决

解决

首先我们要确定下是不是锁表了,使用如下语句可查询当前数据库被锁表的信息

1
2
3
select   request_session_id   锁表进程,OBJECT_NAME(resource_associated_entity_id) 被锁表名
from sys.dm_tran_locks where resource_type='OBJECT';

如果查询出来有数据,那说明被锁表了,使用下面语句进行解锁,其实就是kill掉该进程

1
2
3
4
5
declare @spid  int
Set @spid = 71 --锁表进程
declare @sql varchar(1000)
set @sql='kill '+cast(@spid as varchar)
exec(@sql)

第二行的71就是上面查询语句中查询出来的锁表进程,如果有多个,一个个执行下就行