Microsoft Link :
https://technet.microsoft.com/en-us/library/jj856598(v=sql.110).aspx
Locks held by Current Processes:
SQL Server 2008 R2
https://technet.microsoft.com/en-us/library/ms189497(v=sql.105).aspx
SQL Team Primer on Locks :
http://www.sqlteam.com/article/introduction-to-locking-in-sql-server
Kalen Delany Crisp explanation on Update Locks:
http://sqlblog.com/blogs/kalen_delaney/archive/2009/11/13/update-locks.aspx
UPDATE locks are not really a separate kind of lock, but rather are a hybrid of SHARED and EXCLUSIVE locks. And contrary to what you might think, UPDATE locks are not just acquired for UPDATE operations. A transaction acquires this kind of lock when SQL Server executes a data modification operation but first needs to perform a search to find the resource to modify.
SELECT 'Locks' AS Locks , spid , nt_username , name , hostname , loginame , waittime , open_tran , CONVERT(VARCHAR, GETDATE() - last_batch, 114) AS TimeSinceLastCommand , CASE req_mode WHEN 0 THEN 'Not granted' WHEN 1 THEN 'Schema stability' WHEN 2 THEN 'Schema modification' WHEN 3 THEN 'Intent shared' WHEN 4 THEN 'Update' WHEN 5 THEN 'Exclusive' WHEN 6 THEN 'Intent Shared' WHEN 7 THEN 'Intent Update' WHEN 8 THEN 'Intent Exclusive' WHEN 9 THEN 'Shared Intent Update' WHEN 10 THEN 'Shared Intent Exclusive' WHEN 11 THEN 'Update Intent Exclusive' WHEN 12 THEN 'Bulk operation' WHEN 13 THEN 'RangeS_S (Shared Key-Range and Shared Resource lock)' WHEN 14 THEN 'RangeS_U (Shared Key-Range and Update Resource lock)' WHEN 15 THEN 'RangeI_N (Insert Key-Range and Null Resource lock)' WHEN 16 THEN 'RangeI_S. Key-Range Conversion lock' WHEN 17 THEN 'RangeI_U. Key-Range Conversion lock' WHEN 18 THEN 'RangeI_X. Key-Range Conversion lock' WHEN 19 THEN 'RangeX_S. Key-Range Conversion lock,' WHEN 20 THEN 'RangeX_U. Key-Range Conversion lock' WHEN 21 THEN 'Exclusive Key-Range and Exclusive Resource lock)' ELSE STR(req_mode) END AS LockMode FROM master..syslockinfo LEFT JOIN sysobjects so ON so.id = rsc_objid LEFT JOIN master..sysprocesses sp ON sp.spid = req_spid -- WHERE spid = @@SPID AND rsc_dbid = DB_ID()
Locks Acquired by a SPID:
Quick and dirty way but gives you good idea about resources involved.
BEGIN TRANSACTION SELECT * FROM sampleschema.tablename (UPDLOCK) EXEC sp_lock @@SPID COMMIT BEGIN TRANSACTION SELECT * FROM sampleschema.tablename EXEC sp_lock @@SPID COMMIT