Create proc p_lockinfo  
    @kill_lock_spid bit=1, --是否杀掉死锁的进程,1 杀掉, 0 仅显示  
    @show_spid_if_nolock bit=1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示  
    as  
     
    declare @count int,@s nvarchar(1000),@i int  
    select id=identity(int,1,1),标志,  
    进程ID=spid,线程ID=kpid,块进程ID=blocked,数据库ID=dbid,  
    数据库名=db_name(dbid),用户ID=uid,用户名=loginame,累计CPU时间=cpu,  
    登陆时间=login_time,打开事务数=open_tran, 进程状态=status,  
    工作站名=hostname,应用程序名=program_name,工作站进程ID=hostprocess,  
    域名=nt_domain,网卡地址=net_address  
    into #t from(  
    select 标志='死锁的进程',  
    spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,  
    status,hostname,program_name,hostprocess,nt_domain,net_address,  
    s1=a.spid,s2=0
    from master..sysprocesses a join (  
    select blocked from master..sysprocesses group by blocked  
    )b on a.spid=b.blocked where a.blocked=0
    union all  
    select '|_牺牲品_>',  
    spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,  
    status,hostname,program_name,hostprocess,nt_domain,net_address,  
    s1=blocked,s2=1
    from master..sysprocesses a where blocked<>0  
    )a order by s1,s2  
     
    select @count=@@rowcount,@i=1
     
    if @count=0 and @show_spid_if_nolock=1
    begin  
    insert #t  
    select 标志='正常的进程',  
    spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,login_time,  
    open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address  
    from master..sysprocesses  
    set @count=@@rowcount  
    end  
     
    if @count>0  
    begin  
    create table #t1(id int identity(1,1),a nvarchar(30),b Int,EventInfo nvarchar(255))  
    if @kill_lock_spid=1
    begin  
    declare @spid varchar(10),@标志 varchar(10)  
    while @i<=@count  
    begin  
       select @spid=进程ID,@标志=标志 from #t where id=@i  
       insert #t1 exec('dbcc inputbuffer('+@spid+')')  
       if @标志='死锁的进程' exec('kill '+@spid)  
       set @i=@i+1  
    end  
    end  
    else  
    while @i<=@count  
    begin  
       select @s='dbcc inputbuffer('+cast(进程ID as varchar)+')' from #t where id=@i  
       insert #t1 exec(@s)  
       set @i=@i+1  
    end  
    select a.*,进程的SQL语句=b.EventInfo  
    from #t a join #t1 b on a.id=b.id  
    end

/*

非原创
在mester中创建存储过程
存储过程执行命令
exec master.dbo.p_lockinfo 0,0 ---显示死锁的进程,不显示正常的进程  
exec master.dbo.p_lockinfo 1,0 ---杀死死锁的进程,不显示正常的进程
exec master.dbo.p_lockinfo 0,1 ---显示死锁的进程,显示正常的进程  
exec master.dbo.p_lockinfo 1,1 ---杀死死锁的进程,显示正常的进程
*/

sqlserver存储过程杀掉数据库中死锁的更多相关文章

  1. SQLserver删除某数据库中所有表 方法 二

    方便删除数据库中所有的数据表,清空数据库,有些有约束,不能直接delete,需要先删除库中的约束,代码如下: --删除所有约束DECLARE c1 cursor for select 'alter t ...

  2. C# 批量插入表SQLSERVER SqlBulkCopy往数据库中批量插入数据

    #region 帮助实例:SQL 批量插入数据 多种方法 /// <summary> /// SqlBulkCopy往数据库中批量插入数据 /// </summary> /// ...

  3. Sqlserver在现有数据库中插入数据

    需求:1.客户提供的excel表和数据库中的表结构总是有一些差距,id的生成,各种字段的关联等等 2. 如何在Excel中生成Guid. 1.在Excel的宏中执行以下代码: Private Decl ...

  4. SQLSERVER查询整个数据库中某个特定值所在的表和字段的方法

    这几天有业务部门需要使用一个SAP B1老系统  中的报表,但是由于此报表没有加时间条件,导致一旦开始查询 就会导致B1系统异常退出.由于报表对应的SQL 是存在数据库中,所以想通过查找到这个报表的S ...

  5. SQLSERVER:计算数据库中各个表的数据量和每行记录所占用空间

    转:http://www.cnblogs.com/lyhabc/p/3828496.html CREATE TABLE #tablespaceinfo ( nameinfo ) , rowsinfo ...

  6. SQLServer 命令批量删除数据库中指定表(游标循环删除)

    DECLARE @tablename VARCHAR(30),@sql VARCHAR(500)DECLARE cur_delete_table CURSOR READ_ONLY FORWARD_ON ...

  7. SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 遇到的问题(Problems) 实现代码(SQL Codes) 方法一:拼接SQL: 方法二: ...

  8. 数据库中Schema(模式)概念的理解

    在学习SQL的过程中,会遇到一个让你迷糊的Schema的概念.实际上,schema就是数据库对象的集合,这个集合包含了各种对象如:表.视图.存储过程.索引等.为了区分不同的集合,就需要给不同的集合起不 ...

  9. 存储过程系列之存储过程sql数据库调用和程序代码调用

    1.存储过程,无参数的存储过程 创建无参数存储存储过程 Create Procedure DCEMREMR_TEMPLATEAs SELECT TOP 10 [FILENAME],[FILETITLE ...

随机推荐

  1. list_for_each_entry解析

    双向链表及链表头: 建立一个双向链表通常有一个独立的用于管理链表的链表头,链表头一般是不含有实体数据的,必须用INIT_LIST_HEAD()进行初始化,表头建立以后,就可以将带有数据结构的实体链表成 ...

  2. 使用Spring注解获取配置文件信息

    需要加载的配置文件内容(resource.properties): #FTP相关配置 #FTP的IP地址 FTP_ADDRESS=192.168.1.121 FTP_PORT=21 FTP_USERN ...

  3. python 之时间模块 time

    time模块可以用于格式化日期和时间,时间间隔是以秒为单位的浮点小数.每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示. 下面是time模块常用的一些时间格式转换的函数.时间戳可以 ...

  4. Mock Server 之 moco-runner 使用指南二

    文章出处http://blog.csdn.net/crisschan/article/details/53335234 moco-runner 安装配置 1. 下载jar https://repo1. ...

  5. ORM到底是用还是不用?(复制)

    ORM即Object/Relation Mapping的简写,一般称作“对象关系映射”,在Web开发中最常出没于和关系型数据库交互的地方.接口.中间件.库.包,你都可以这么称呼它.ORM我们可以结合P ...

  6. 启动secondarynamenode时报错

    环境: mac系统 + hadoop2.6.0-cdh5.7.0伪分布式  问题一: 在启动hdfs的secondarynamenode时,报错. 正常情况: sumengdeMacBook-Pro: ...

  7. 零基础学习openstack【完整中级篇】及openstack资源汇总

    1.你是如何学习openstack的?2.你对openstack的组件了解多少?3.你认为openstack该如何学习? 一直想写关于openstack的方面的内容,今天终于整理完成.算是完成一桩心事 ...

  8. Java线程常用方法汇总

    1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据.注意该方 ...

  9. 利用JS代码快速获得知网论文作为参考文献的引用文本

    写论文的时候,发现知网虽然提供了生成参考文献引用标注的功能,但是效率仍然不太高.我就忙里偷闲写了一段简单的脚本,能无延迟地生成这段引用文本.目前支持期刊论文和硕士论文. 代码: (function() ...

  10. linux系统中python版本升级

    一,查看python版本号 python -V 二,下载需要升级到python版本包下载地址https://www.python.org/ftp/python/ 根据需要选择需要的python版本 e ...