• SQL SERVER 查询死锁


    USE master
    go


    CREATE PROCEDURE [dbo].[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(11) ,
                  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
    View Code
  • 相关阅读:
    写一个简单的 Linux Shell (C++)
    操作系统课程设计的技巧与踩坑
    Power Designer建模之餐饮在线点评系统——概念数据模型
    Power Designer建模之餐饮在线点评系统——业务处理模型
    Power Designer建模之餐饮在线点评系统——需求模型实例
    使用本地json-server服务,创建简单的本地api数据
    从入门到入土JS知识(一):关系操作符和相等操作符
    工作中用到的小脚本2
    绕WAF(Bypass)--随时更新
    关于FastJson漏洞的一切(未完待续)
  • 原文地址:https://www.cnblogs.com/51net/p/3288638.html
Copyright © 2020-2023  润新知