某些情況下,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