原文:监控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. api-ms-win-crt-runtime-l1-1-0.dll 丢失

    api-ms-win-crt-runtime就是MFC的运行时环境的库,python在windows上编译也是用微软的visual studio C++编译的,底层也会用到微软提供的C++库和runt ...

  2. Mac 终端显示git分支

    1 进入你的home目录 cd ~ 2 编辑.bashrc文件 vi .bashrc 3 将下面的代码加入到文件的最后处 function git_branch { branch="`git ...

  3. Docs-.NET-C#-指南-语言参考-预处理器指令:#pragma(C# 参考)

    ylbtech-Docs-.NET-C#-指南-语言参考-预处理器指令:#pragma(C# 参考) 1.返回顶部 1. #pragma(C# 参考) 2015/07/20 #pragma 为编译器给 ...

  4. oracle连接-会话-进程

    ALTER SYSTEM SET RESOURCE_LIMIT=TRUE;CREATE PROFILE kyc_pro LIMIT IDLE_TIME 2;alter user kyc_acc pro ...

  5. 开源配置中心xxl-conf的核心原理分析

    XXL-CONF是一款轻量级的开源配置中心项目,由国内大牛许雪里开发.下面是官方对其优点作出的描述: 一个轻量级分布式配置管理平台,拥有"轻量级.秒级动态推送.多环境.跨语言.跨机房.配置监 ...

  6. SQL查询优化 LEFT JOIN和INNER JOIN

    作者:VerySky 推荐:陈敬(Cathy) SQL查询优化 LEFT JOIN和INNER JOIN 1,连接了八个数据库表,而且全部使用LEFT JOIN,如下所示: Resource_Reso ...

  7. Elasticsearch集成Hadoop最佳实践.pdf(内含目录)

    Elasticsearch服务器开发(第2版) 介绍: ElasticSearch是一个开源的分布式搜索引擎,具有高可靠性,支持非常多的企业级搜索用例.ElasticsearchHadoop作为一个完 ...

  8. OHEM(online hard example mining)

    最早由RGB在论文<Training Region-based Object Detectors with Online Hard Example Mining>中提出,用于fast-rc ...

  9. macos的iptables功能是pfctl

    pfctl https://www.kokaruk.com/macos-pf-firewall/ https://blog.csdn.net/yjy1304/article/details/90762 ...

  10. 第七章 云原生生态的基石 Kubernetes

    7.1 Kubernetes架构 K8s的核心组件: etcd: 协同存储,负责保存整个集群的状态. API:资源操作的唯一入口. controller manager: 维护集群的状态,执行故障检测 ...