Skip to content

Instantly share code, notes, and snippets.

@petesql
Created January 23, 2025 22:04
Show Gist options
  • Save petesql/c16f7a19e154e42a001e303b682904b0 to your computer and use it in GitHub Desktop.
Save petesql/c16f7a19e154e42a001e303b682904b0 to your computer and use it in GitHub Desktop.
Get Exclusive Locks for Tables in SQL Server
-- show exclusive locks on tables for a database
DECLARE @DatabaseName NVARCHAR(128) = 'database01'
DECLARE @DatabaseID INT = DB_ID(@DatabaseName)
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = N'
USE ' + QUOTENAME(@DatabaseName) + ';
SELECT
ses.login_name AS UserName,
ses.session_id AS SessionID,
ses.host_name AS hostname,
obj.name AS ObjectName,
obj.type_desc AS ObjectType,
locks.resource_type AS ResourceType,
locks.request_status AS LockStatus,
CASE
WHEN locks.request_mode = ''SCH-S'' THEN ''Sch-S (Schema stability)''
WHEN locks.request_mode = ''IS'' THEN ''IS (Intent Shared)''
WHEN locks.request_mode = ''X'' THEN ''X (Exclusive)''
WHEN locks.request_mode = ''IX'' THEN ''IX (Intent Exclusive)''
WHEN locks.request_mode = ''S'' THEN ''S (Shared)''
WHEN locks.request_mode = ''U'' THEN ''U (Update)''
ELSE ''NULL (No access granted)''
END AS LockType,
ses.program_name AS programName,
ses.client_interface_name AS clientInterface
FROM sys.dm_tran_locks AS locks
JOIN sys.dm_exec_sessions AS ses ON locks.request_session_id = ses.session_id
JOIN sys.objects AS obj ON locks.resource_associated_entity_id = obj.object_id
WHERE locks.resource_database_id = ' + CAST(@DatabaseID AS VARCHAR(10)) + ';'
EXEC sp_executesql @SQL;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment