<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>死锁 on 冯威的博客</title><link>https://fwhyy.com/tags/%E6%AD%BB%E9%94%81/</link><description>Recent content in 死锁 on 冯威的博客</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Sat, 06 Aug 2011 00:00:00 +0800</lastBuildDate><atom:link href="https://fwhyy.com/tags/%E6%AD%BB%E9%94%81/atom.xml" rel="self" type="application/rss+xml"/><item><title>SqlServer表死锁的解决方法</title><link>https://fwhyy.com/2011/08/essentially-a-table-of-deadlock-solution/</link><pubDate>Sat, 06 Aug 2011 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2011/08/essentially-a-table-of-deadlock-solution/</guid><description>&lt;p&gt;前些天写一个存储过程，存储过程中使用了事务，后来我把一些代码注释掉来进行调试找错，突然发现一张表被锁住了，原来是创建事务的代码忘记注释掉。本文表锁住了的解决方法。&lt;/p&gt;
&lt;p&gt;其实不光是上面描述的情况会锁住表，还有很多种场景会使表放生死锁，解锁其实很简单，下面用一个示例来讲解：&lt;/p&gt;
&lt;p&gt;1 首先创建一个测试用的表：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;CREATE TABLE Test
(
 TID INT IDENTITY(1,1)
)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;2 执行下面的SQL语句将此表锁住：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SELECT * FROM Test WITH (TABLOCKX)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;3 通过下面的语句可以查看当前库中有哪些表是发生死锁的：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SELECT request_session_id spid,OBJECT_NAME(resource_associated_entity_id)tableName
FROM sys.dm_tran_locks
WHERE resource_type=&amp;#39;OBJECT &amp;#39; 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;4 上面语句执行结果如下：&lt;/p&gt;
&lt;p&gt;spid ：被锁进程ID。
tableName：发生死锁的表名。
5 只需要使用kill关键字来杀掉被锁的进程ID就可以对表进行解锁：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;KILL 52
&lt;/code&gt;&lt;/pre&gt;</description></item></channel></rss>