c#大圣之路笔记——SQL 通过创建存储过程,查看当前进程情况(是否造成表锁死等)

存储过程:

  1 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)

 
时间: 2024-11-03 22:00:44

c#大圣之路笔记——SQL 通过创建存储过程,查看当前进程情况(是否造成表锁死等)的相关文章

SQL大圣之路笔记——SQL 创建索引 index

1 --创建索引的标准:根据实际的sql语句进行分析,’列’出现在where中的次数较多,时间损耗较大,则为这个‘列’建立索引, 2 3 --注意:不是越多越好,因为没建立一个‘列’索引,都要排序存储一次,会让数据库文件变大 4 5 6 --创建索引 7 create index index_name 8 on 表名(列名)

SQL大圣之路笔记——SQL学习笔记

1.复习->自连接 针对于什么结构的表做自连接 关系列引用本表的主键列信息 这种表不是单一的含义->外连接 left join right join full join->case子句 必须出现在select语句中 完成选择功能->常用全局变量:@@identity,@@error->over子句:结合编号.聚合使用 sum(ocount) over() 开窗函数:将多行数据进行划区 over(partition by 列名 order by 列名) rank() row_n

SQL大圣之路笔记——SQL 行转列,列转行

1 /*普通行列转换 2 (爱新觉罗.毓华 2007-11-18于海南三亚) 3 4 假设有张学生成绩表(tb)如下: 5 Name Subject Result 6 张三 语文 74 7 张三 数学 83 8 张三 物理 93 9 李四 语文 74 10 李四 数学 84 11 李四 物理 94 12 */ 13 14 ------------------------------------------------------------------------- 15 /* 16 想变成 1

SQL大圣之路笔记——SQL 获取excel中的数据

1 select 2 --case (isnumeric(CMF_No)) when 1 then Convert(decimal(18,0),CMF_No) 3 --else Convert(nvarchar(255),CMF_No) end as CMF_No,Disti_Name, 4 --case (isnumeric(Disti_Invoice_Num)) when 1 then Convert(decimal(18,0),Disti_Invoice_Num) else 'sss' e

SQL大圣之路笔记——SQL存储过程优化之 nocount

在存储过程中,经常用到SET NOCOUNT ON: 作用:阻止在结果集中返回显示受T-SQL语句或则usp影响的行计数信息.当SET ONCOUNT ON时候,不返回计数,当SET NOCOUNT OFF时候,返回计数: 即使当SET NOCOUNT ON 时候,也更新@@RowCount: 当SET NOCOUNT on时候,将不向客户端发送存储过程每个语句的DONE_IN_proc消息,如果存储过程中包含一些并不返回实际数据的语句,网络通信流量便会大量减少,可以显著提高应用程序性能: SE

SQL大圣之路笔记——SQL TRUNCATE,DELETE,DROP

TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少. DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项.TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放. TRUNCATE,DELETE,DROP放在一起比较:TRUNCATE TABLE:删除内容.释放空间但不删除定义.D

SQL大圣之路笔记——把数据库中表里的数据导出成Excel(Copy时,会因分隔符问题导致许多数据存放在一个单元格中)

1.选中DB, 右击选择"Tasks",选中"Export Data" 点击. 2.点击"Next", Authentication 选择使用 "Windows 用户名认证" or "SQL Server 用户名,密码认证",点击"Next".    3.保存文件格式:"Excel", 选择保存文件的路径.Excel 版本,点击"Next".-&g

SQL大圣之路笔记——把Excel中的数据通过Access导入到DataBase中

把Excel中的数据通过Access导入到DataBase中 1.打开Access ,点击“EXTERNAL DATA",选择上传”excel",选中需要导入的excel,点击ok. 2.选择excel中需要上传数据的sheet,点击”next",再点击“next”,选择列明,更改 Data Type (Short Text类型导入后会成为nvarchar);点击“next”,再点击“next” ,设定导入DB之后的表名,点击“finish”. 3.右击表名,点击“Expor

SQL大圣之路笔记——存储过程中含有大量sql时,使用事务处理机制

1 --事务开始,如果中间有系统错误,则Roll Back 2 BEGIN TRY 3 BEGIN TRAN 4 --存储过程的全部脚本 5 SELECT * 6 FROM #raw_data 7 WHERE id = @rowNo 8 9 COMMIT TRAN 10 END TRY 11 BEGIN CATCH 12 ROLLBACK TRAN 13 --系统错误 14 INSERT INTO store_batch_import_templog 15 ( Remark 16 ) 17 SE