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. 【IO】- 关于ByteBuffer的一点认识

    我们经常使用ByteBuffer. 通俗的Non-DerictedByteBuffer结构如下 HeapByteBuffer extends ByteBuffer { Byte[] array; in ...

  2. PHP计算上一个月最后一天、当月最后一天、下一个月最后一天

    上个月最后一天: $last_month_last_day = date('Y-m-t',strtotime('-1 month')); 当月最后一天: $first_day=date('Y-m-01 ...

  3. ionic 打包

    比如我下载一个官方的小Demoionic start myApp tabs(我默认你已经配置好了安卓的开发环境.安装了全局的ionic.cordova)   首先,你需要给项目添加安卓平台的支持ion ...

  4. ansible一些基本操作

    一.介绍 特性 (1).no agents:不需要在被管控主机上安装任何客户端: (2).no server:无服务器端,使用时直接运行命令即可: (3).modules in any languag ...

  5. Uninstalling JIRA applications from Linux

     If you wish to re-install JIRA in 'unattended mode', do not uninstall your previous installation of ...

  6. U盘在制作Ubuntu启动盘后Windows系统下显示空间不对的解决办法(Ubuntu系统下格式化U盘的方法)

    用Ubuntu系统自带的启动盘制作工具后,将U盘拿到Windows系统下使用显示出的空间与U盘大小不同. 解决该问题的办法: 使用Linux终端: 第一步:sudo fdisk -l 这个命令主要是查 ...

  7. [日志]logback告警

    开发过程中,难免会有发生错误或异常的时候,有些是需要及时通知到相关开发人员的.logback可以通过简单的配置达到邮件告警的目的. 一.错误告警 如下配置,所有Error级别的log发送邮件告警给re ...

  8. Autowire

    Field userService in com.demo.web.Controller.HomeController required a single bean, but 2 were found ...

  9. Python面试题之Python面向对象编程汇总

    面向对象的设计思想是从自然界中来的,因为在自然界中,类(Class)和实例(Instance)的概念是很自然的.Class是一种抽象概念,比如我们定义的Class——Student,是指学生这个概念, ...

  10. WCF基本知识

    1.开通WCF调试服务: 须在服务端的行为中作如下配置:includeExceptionDetailInFaults="true" 代码如下: <behaviors> ...