当前位置:Gxlcms >
数据库问题 >
c#大圣之路笔记——SQL 通过创建存储过程,查看当前进程情况(是否造成表锁死等)
c#大圣之路笔记——SQL 通过创建存储过程,查看当前进程情况(是否造成表锁死等)
时间:2021-07-01 10:21:17
帮助过:2人阅读
create procedure sp_who_lock
2
3 as
4
5 begin
6
7 declare @spid int,
@bl int,
8
9 @intTransactionCountOnEntry int,
10
11 @intRowcount int,
12
13 @intCountProperties int,
14
15 @intCounter int
16
17
18
19 create table #tmp_lock_who (
20
21 id
int identity(
1,
1),
22
23 spid
smallint,
24
25 bl
smallint)
26
27
28
29 IF @@ERROR<>0 RETURN @@ERROR
30
31
32
33 insert into #tmp_lock_who(spid,bl)
select 0 ,blocked
34
35 from (
select * from sysprocesses
where blocked
>0 ) a
36
37 where not exists(
select * from (
select * from sysprocesses
where blocked
>0 ) b
38
39 where a.blocked
=spid)
40
41 union select spid,blocked
from sysprocesses
where blocked
>0
42
43
44
45 IF @@ERROR<>0 RETURN @@ERROR
46
47
48
49 -- 找到临时表的记录数
50
51 select @intCountProperties = Count(
*),
@intCounter = 1
52
53 from #tmp_lock_who
54
55
56
57 IF @@ERROR<>0 RETURN @@ERROR
58
59
60
61 if @intCountProperties=0
62
63 select ‘现在没有阻塞和死锁信息‘ as message
64
65
66
67 -- 循环开始
68
69 while @intCounter <= @intCountProperties
70
71 begin
72
73 -- 取第一条记录
74
75 select @spid = spid,
@bl = bl
76
77 from #tmp_lock_who
where Id
= @intCounter
78
79 begin
80
81 if @spid =0
82
83 select ‘引起数据库死锁的是: ‘+ CAST(
@bl AS VARCHAR(
10))
+ ‘进程号,其执行的SQL语法如下‘
84
85 else
86
87 select ‘进程号SPID:‘+ CAST(
@spid AS VARCHAR(
10))
+ ‘被‘ + ‘进程号SPID:‘+ CAST(
@bl AS VARCHAR(
10))
+‘阻塞,其当前进程执行的SQL语法如下‘
88
89 DBCC INPUTBUFFER (
@bl )
90
91 end
92
93
94
95 -- 循环指针下移
96
97 set @intCounter = @intCounter + 1
98
99 end
100
101
102
103
104
105 drop table #tmp_lock_who
106
107
108
109 return 0
110
111 end
1 ////查看进程,处理进程
2
3
4 ///关闭进程
5 KILL 126
6
7
8
9 ///查看进程情况
10 DBCC INPUTBUFFER(91)
c#大圣之路笔记——SQL 通过创建存储过程,查看当前进程情况(是否造成表锁死等)
标签: