原文:监控SQL:执行表中所有sql语句、记录每个语句运行时间(3)


通过执行一个 带参数的存储过程  exec  OpreateTB('OpreateUser','IsRun')  更新表的数据

表结构:(RunTime,RunStatus,BetweenTime,RunLog,IsRun)。

字段解释:

1、RunTime 这条语句的执行时间  

2、RunStatus 为执行语句是否成功  1表示执行成功   0 表示异常  NULL 就是还未执行 -1表示回滚

3、BetweenTime :执行这条语句所用时间

4、RunLog 执行 返回的消息结果  如(1行影响)

5、IsRun :是否执行语句 0 表示 未执行,1表示已执行

执行过程如果有错误语句直接回滚 并且 Runlog 都更新为'回滚'。

执行 按照 OrderNumber 升序执行语句。


  1. --delete from tb_CMd
  2. CREATE TABLE [dbo].[TB_CMD](
  3. [RowGuid] [nvarchar](50) NOT NULL,
  4. [RunTime] [date] NULL,
  5. [RunStatus] [int] NULL,
  6. [SqlEvent] [nvarchar](max) NULL,
  7. [OrderNumber] [int] NULL,
  8. [IsRun] [bit] NULL,
  9. [OpreateUser] [nchar](10) NULL,
  10. [SqlType] [nchar](10) NULL,
  11. [BetweenTime] [int] NULL,
  12. [RunLog] [nvarchar](200) NULL,
  13. CONSTRAINT [PK_TB_CMD] PRIMARY KEY CLUSTERED
  14. (
  15. [RowGuid] ASC
  16. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  17. ) ON [PRIMARY]
  18. GO
  19. ALTER TABLE [dbo].[TB_CMD] ADD CONSTRAINT [DF_TB_CMD_RowGuid] DEFAULT (newid()) FOR [RowGuid]
  20. GO
  21. insert into tb_CMd (sqlevent,OrderNumber,IsRun,OpreateUser )values('create table tb (id int ,name varchar(10))',1,0,'Tom')
  22. insert into tb_CMd (sqlevent,OrderNumber,IsRun,OpreateUser )values('insert into tb select 1,''test1''',2,0,'Tom')
  23. insert into tb_CMd (sqlevent,OrderNumber,IsRun,OpreateUser )values('insert into tb select 1,''test1''',3,0,'Jack')
  24. insert into tb_CMd (sqlevent,OrderNumber,IsRun,OpreateUser )values('insert into tb select 2,''test2''',4,0,'Tom')
  25. insert into tb_CMd (sqlevent,OrderNumber,IsRun,OpreateUser )values('update tb set name =''test_1'' where id =1''',5,0,'Tom')
  26. insert into tb_CMd (sqlevent,OrderNumber,IsRun,OpreateUser )values('delete from tb where id=1',6,0,'Tom')
  27. insert into tb_CMd (sqlevent,OrderNumber,IsRun,OpreateUser )values('select * from#tb',7,0,'Tom')
  28. insert into tb_CMd (sqlevent ,OrderNumber,IsRun,OpreateUser )values('drop table tb',8,1,'Tom')
  29. go
  30. select * from tb_cmd order by OrderNumber asc

这里用一个存储过程来实现:


  1. create proc dbo.OpreateTB
  2. --@OpreateUser nvarchar(100),
  3. --@IsRun nvarchar(10)
  4. as
  5. declare @i int
  6. declare @start datetime
  7. declare @sql nvarchar(max)
  8. declare @OrderNumber int
  9. declare @error int
  10. declare @ROWCOUNT int
  11. set @i = 1;
  12. while @i <= (select COUNT(*) from [TB_CMD])
  13. begin
  14. --按照[OrderNumber]进行了排序,每次取出1条
  15. ;with t
  16. as
  17. (
  18. select *,
  19. ROW_NUMBER() over(order by [OrderNumber]) rownum
  20. from [TB_CMD]
  21. )
  22. select @sql = [SqlEvent],
  23. @OrderNumber = [OrderNumber]
  24. from t
  25. where rownum = @i
  26. set @start = GETDATE()
  27. exec(@sql);
  28. select @error = @@ERROR,
  29. @ROWCOUNT = @@ROWCOUNT
  30. update [TB_CMD]
  31. set BetweenTime = datediff(ms,@start,GETDATE()),
  32. RunLog = case when @error = 0 then '('+cast(@ROWCOUNT as varchar)+'行影响)'
  33. else '回滚'
  34. end,
  35. RunStatus = case when @error = 0 then 1
  36. when @error <> 1 then 0
  37. end,
  38. IsRun = 1
  39. where [OrderNumber] = @OrderNumber --这里也修改了
  40. set @i = @i + 1
  41. end
  42. go
发布了416 篇原创文章 · 获赞 135 · 访问量 94万+

监控SQL:执行表中所有sql语句、记录每个语句运行时间(3)的更多相关文章

  1. 从Sql Server表中随机获取一些记录最简单的方法

    * FROM test ORDER BY NewID() 注意,使用时,请将‘test’改为真实的表名.

  2. SQL(insert、delete、update)执行成功,但是数据库表中无显示无记录

    如题,程序中insert一条记录,调试过程中根据执行结果发现此条sql已经执行成功(影响行数为1且插入记录已生成自增主键正确值),但是查询数据库相应表时发现表中并无相应记录,通过直接在表中插入测试数据 ...

  3. 在一个SQL Server表中的多个列找出最大值

    在一个SQL Server表中一行的多个列找出最大值 有时候我们需要从多个相同的列里(这些列的数据类型相同)找出最大的那个值,并显示 这里给出一个例子 IF (OBJECT_ID('tempdb..# ...

  4. SQL 把表中字段存储的逗号隔开内容转换成列表形式

    原文:[原创]SQL 把表中字段存储的逗号隔开内容转换成列表形式 我们日常开发中,不管是表设计问题抑或是其他什么原因,或多或少都会遇到一张表中有一个字段存储的内容是用逗号隔开的列表. 具体效果如下图: ...

  5. sql 删除表中的重复记录

    嗯,遇见了表中存在重复的记录的问题,直接写sql删除时最快的,才不要慢慢的复制到excel表中慢慢的人工找呢.哼. 如下sql,找出重复的记录,和重复记录中ID值最小的记录(表中ID为自增长) sel ...

  6. sql一个表中两个字段合并求和

    sql一个表中两个字段,合并求和 SELECT SUM(字段a+'.'+字段b) as total  from TABLE

  7. SQL server 表中如何创建索引?

    SQL server 表中如何创建索引?看个示例,你就会了 use master goif db_id(N'zhangxu')is not nulldrop database zhangxugocre ...

  8. oracle通过sql随机取表中的10条记录

    oracle通过sql随机取表中的10条记录: SELECT * FROM (SELECT * FROM T_USER ORDER BY DBMS_RANDOM.RANDOM()) WHERE Row ...

  9. SQL将一个表中的某一列值全部插入到另一个表中

    1.  SQL将一个表中的某一列值全部插入到另一个表中 插入的话: insert into a(col) select col from b; 更新的话: update a set col=selec ...

随机推荐

  1. Comparison and difference for Default geodatabase,Current workspace,Scratch workspace,Home Folder

    Comparison and difference for Default geodatabase,Current workspace,Scratch workspace,Home Folder 商务 ...

  2. NonSerialized 属性忽略序列化报错'NonSerialized' is not valid on this declaration type

    [XmlIgnore] [NonSerialized] public List<string> paramFiles { get; set; } //I get the following ...

  3. 小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_41、SpringBoot定时任务schedule讲解

    笔记 1.SpringBoot定时任务schedule讲解     简介:讲解什么是定时任务和常见定时任务区别 1.常见定时任务 Java自带的java.util.Timer类            ...

  4. IDEA使用本机指定的java环境

    IDEA使用本机指定的java环境     原文链接:https://my.oschina.net/ElEGenT/blog/3053147 idea 的安装包内有自己的jre. idea 默认使用自 ...

  5. Spring cloud微服务安全实战-3-8API安全机制之Https

    Https访问 1.验证双方的身份. 2.一旦建立连接,对数据进行封装加密 这里先生成一个自己自签的证书,不是第三方颁发的,第三方颁发的要花钱. 第二是做一些配置,让程序支持https 安装了java ...

  6. Python初级 4 数据的类型

    一.数据类型 1.整数: int a = 3 b = 5 2.浮点数: float a = 3.0 b = 5.2 3.字符串: str a = "3.0" b = "3 ...

  7. mybatis 存储过程与游标的使用

    MyBatis还能对存储过程进行完全支持,这节开始学习存储过程.在讲解之前,我们需要对存储过程有一个基本的认识,首先存储过程是数据库的一个概念,它是数据库预先编译好,放在数据库内存中的一个程序片段,所 ...

  8. Python - Django - ORM 分组查询补充

    单表查询: models.py: from django.db import models class Employee(models.Model): name = models.CharField( ...

  9. win8(x64)下,重新安装delphi 2007时出现“Invalid Serial Number”,如何解决?

    1)在添加删除程序里卸载delphi 2007 2)删除C:\ProgramData\CodeGear 3)删除C:\Program Files (x86)CodeGear 4)删除d:\Progra ...

  10. attribute__关键字举例之visibility

    /** @file visibilityT.c * @note * @brief * @author * @date 2019-6-20 * @note v1.0.0 Created * @histo ...