一二三三二一,跟我一起念:“啊~”

[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
posted @ 2021-08-10 09:36  LucioLu  阅读(893)  评论(0编辑  收藏  举报

正在研究中