1. 程式人生 > >SqlServer檢視鎖表與解鎖

SqlServer檢視鎖表與解鎖

某些情況下,sqlserver的表會被鎖住,比如某個會話視窗有資料一直沒提交,視窗又沒關閉,這時表就會被鎖住

其他任何連線查詢表資料時都不會返回

這時需要手工殺掉產生死鎖的會話ID,才能恢復正常

檢視被鎖表:

select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName   
from   sys.dm_tran_locks where resource_type='OBJECT'

spid   鎖表程序 
tableName   被鎖表名

解鎖:

declare @spid  int 
Set @spid  = 57 --鎖表程序
declare @sql varchar(1000)
set @sql='kill '+cast(@spid  as varchar)
exec(@sql)

sql server在執行查詢語句時會鎖表。在鎖表期間禁止增刪改操作。

如果不想鎖表,那就再表名或別名後面加上WITH(NOLOCK)

如下所示:

SELECT Id FROM dbo.T_Table WITH(NOLOCK) WHERE Id = 1