专栏首页跟着阿笨一起玩NETSqlServer查看死锁的存储过程

SqlServer查看死锁的存储过程

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_who_lock]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[sp_who_lock]
GO
 
USE master
GO
CREATE PROCEDURE sp_who_lock
AS
BEGIN
DECLARE @spid INT,@bl INT,
        @intTransactionCountOnEntry INT,
        @intRowcount INT,
        @intCountProperties INT,
        @intCounter INT
 
        CREATE TABLE #tmp_lock_who (
         id INT IDENTITY(1,1),
         spid SMALLINT,
         bl SMALLINT)
 
        IF @@ERROR<>0 RETURN @@ERROR
 
        INSERT INTO #tmp_lock_who(spid,bl) SELECT 0 ,blocked
          FROM (SELECT * FROM sysprocesses WHERE blocked>0 ) a
          WHERE NOT EXISTS(SELECT * FROM (SELECT * FROM sysprocesses WHERE blocked>0 ) b
          WHERE a.blocked=spid)
          UNION SELECT spid,blocked FROM sysprocesses WHERE blocked>0
 
        IF @@ERROR<>0 RETURN @@ERROR
 
-- 找到临时表的记录数
        SELECT @intCountProperties = COUNT(*),@intCounter = 1
        FROM #tmp_lock_who
 
        IF @@ERROR<>0 RETURN @@ERROR
 
        IF @intCountProperties=0
            SELECT '现在没有阻塞和死锁信息' AS message
 
-- 循环开始
while @intCounter <= @intCountProperties
BEGIN
--取第一条记录
        SELECT @spid = spid,@bl = bl
        FROM #tmp_lock_who WHERE Id = @intCounter
        BEGIN
            IF @spid =0
                SELECT '引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10)) + '进程号,其执行的SQL语法如下'
            ELSE
                SELECT '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下'
            DBCC INPUTBUFFER (@bl )
            END
 
--循环指针下移
        SET @intCounter = @intCounter + 1
END
 
DROP TABLE #tmp_lock_who
 
RETURN 0
END
exec master.dbo.sp_who_lock

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SQL中存储过程中使用事务,并且加入异常处理机制.

    跟着阿笨一起玩NET
  • (2)SQL语句实现表的横向聚合

    经过sql查询后输出的结果集为:(字段后面增加聚合[最大值] [最小值] [>=5的值个数])

    跟着阿笨一起玩NET
  • .NET开源作业调度框架(Quartz.NET和FluentScheduler)实战项目演练

    2.3、如何基于Quartz.NET封装实现优雅的作业调度执行框架(ABenNet.QuartzNet.Practice)

    跟着阿笨一起玩NET
  • 收藏|我的Mysql学习笔记

    SQL是一个存活近半个世纪的语言,如今仍有大量人在使用。它语法简单,对培养数据整理和提取的思维有很大帮助。我将我过去的笔记分享给大家,希望能为大家的学习提供参考...

    刘早起
  • 4GSQL资料爆肝分享|我的Mysql学习笔记

    SQL是一个存活近半个世纪的语言,如今仍有大量人在使用。它语法简单,对培养数据整理和提取的思维有很大帮助。我将我过去的笔记分享给大家,希望能为大家的学习提供参考...

    测试小兵
  • SQL语句知识点

    PERSON表 NUMBER NAME SEX AGE 1 THERON male 19 2 JACK male 20 3 LUCY fema...

    用户1624346
  • 常用SQL语句集合

    一、数据定义 1、创建新数据库:CREATE DATABASE database_name 2、创建新表:CREATE TABLE table_name (c...

    小古哥
  • SQL基础

    WHERE name IN ('Sweden', 'Norway', 'Denmark')

    王脸小
  • 聊聊Java中CompletableFuture的使用

    CompletableFuture是java8引入的一个异步类,它最大的优势是可以在创建的对象中传入一个回调对象,在任务结束后(done或throw excep...

    jinjunzhu
  • 如何恢复oracle中误删除表(drop掉的)?

    以下是一个不该发生却经常发生的情况:用户删除了一个非常重要的表 ― 当然是意外地删除 ― 并需要尽快地恢复。(在某些时候,这个不幸的用户可能就是 DBA!)

    三哥

扫码关注云+社区

领取腾讯云代金券