监控SQL:执行表中所有sql语句、记录每个语句运行时间(3)
原文:监控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 升序执行语句。
-
--delete from tb_CMd
-
-
CREATE TABLE [dbo].[TB_CMD](
-
[RowGuid] [nvarchar](50) NOT NULL,
-
[RunTime] [date] NULL,
-
[RunStatus] [int] NULL,
-
[SqlEvent] [nvarchar](max) NULL,
-
[OrderNumber] [int] NULL,
-
[IsRun] [bit] NULL,
-
[OpreateUser] [nchar](10) NULL,
-
[SqlType] [nchar](10) NULL,
-
[BetweenTime] [int] NULL,
-
[RunLog] [nvarchar](200) NULL,
-
CONSTRAINT [PK_TB_CMD] PRIMARY KEY CLUSTERED
-
(
-
[RowGuid] ASC
-
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
-
) ON [PRIMARY]
-
-
GO
-
-
ALTER TABLE [dbo].[TB_CMD] ADD CONSTRAINT [DF_TB_CMD_RowGuid] DEFAULT (newid()) FOR [RowGuid]
-
GO
-
-
insert into tb_CMd (sqlevent,OrderNumber,IsRun,OpreateUser )values('create table tb (id int ,name varchar(10))',1,0,'Tom')
-
insert into tb_CMd (sqlevent,OrderNumber,IsRun,OpreateUser )values('insert into tb select 1,''test1''',2,0,'Tom')
-
insert into tb_CMd (sqlevent,OrderNumber,IsRun,OpreateUser )values('insert into tb select 1,''test1''',3,0,'Jack')
-
insert into tb_CMd (sqlevent,OrderNumber,IsRun,OpreateUser )values('insert into tb select 2,''test2''',4,0,'Tom')
-
insert into tb_CMd (sqlevent,OrderNumber,IsRun,OpreateUser )values('update tb set name =''test_1'' where id =1''',5,0,'Tom')
-
insert into tb_CMd (sqlevent,OrderNumber,IsRun,OpreateUser )values('delete from tb where id=1',6,0,'Tom')
-
insert into tb_CMd (sqlevent,OrderNumber,IsRun,OpreateUser )values('select * from#tb',7,0,'Tom')
-
insert into tb_CMd (sqlevent ,OrderNumber,IsRun,OpreateUser )values('drop table tb',8,1,'Tom')
-
go
-
select * from tb_cmd order by OrderNumber asc
-
这里用一个存储过程来实现:
-
create proc dbo.OpreateTB
-
--@OpreateUser nvarchar(100),
-
--@IsRun nvarchar(10)
-
as
-
-
declare @i int
-
declare @start datetime
-
declare @sql nvarchar(max)
-
declare @OrderNumber int
-
declare @error int
-
declare @ROWCOUNT int
-
-
set @i = 1;
-
-
while @i <= (select COUNT(*) from [TB_CMD])
-
begin
-
-
--按照[OrderNumber]进行了排序,每次取出1条
-
;with t
-
as
-
(
-
select *,
-
ROW_NUMBER() over(order by [OrderNumber]) rownum
-
from [TB_CMD]
-
)
-
-
select @sql = [SqlEvent],
-
@OrderNumber = [OrderNumber]
-
from t
-
where rownum = @i
-
-
set @start = GETDATE()
-
-
exec(@sql);
-
-
select @error = @@ERROR,
-
@ROWCOUNT = @@ROWCOUNT
-
-
update [TB_CMD]
-
set BetweenTime = datediff(ms,@start,GETDATE()),
-
RunLog = case when @error = 0 then '('+cast(@ROWCOUNT as varchar)+'行影响)'
-
else '回滚'
-
end,
-
RunStatus = case when @error = 0 then 1
-
when @error <> 1 then 0
-
end,
-
IsRun = 1
-
where [OrderNumber] = @OrderNumber --这里也修改了
-
-
set @i = @i + 1
-
end
-
-
go
监控SQL:执行表中所有sql语句、记录每个语句运行时间(3)的更多相关文章
- 从Sql Server表中随机获取一些记录最简单的方法
* FROM test ORDER BY NewID() 注意,使用时,请将‘test’改为真实的表名.
- SQL(insert、delete、update)执行成功,但是数据库表中无显示无记录
如题,程序中insert一条记录,调试过程中根据执行结果发现此条sql已经执行成功(影响行数为1且插入记录已生成自增主键正确值),但是查询数据库相应表时发现表中并无相应记录,通过直接在表中插入测试数据 ...
- 在一个SQL Server表中的多个列找出最大值
在一个SQL Server表中一行的多个列找出最大值 有时候我们需要从多个相同的列里(这些列的数据类型相同)找出最大的那个值,并显示 这里给出一个例子 IF (OBJECT_ID('tempdb..# ...
- SQL 把表中字段存储的逗号隔开内容转换成列表形式
原文:[原创]SQL 把表中字段存储的逗号隔开内容转换成列表形式 我们日常开发中,不管是表设计问题抑或是其他什么原因,或多或少都会遇到一张表中有一个字段存储的内容是用逗号隔开的列表. 具体效果如下图: ...
- sql 删除表中的重复记录
嗯,遇见了表中存在重复的记录的问题,直接写sql删除时最快的,才不要慢慢的复制到excel表中慢慢的人工找呢.哼. 如下sql,找出重复的记录,和重复记录中ID值最小的记录(表中ID为自增长) sel ...
- sql一个表中两个字段合并求和
sql一个表中两个字段,合并求和 SELECT SUM(字段a+'.'+字段b) as total from TABLE
- SQL server 表中如何创建索引?
SQL server 表中如何创建索引?看个示例,你就会了 use master goif db_id(N'zhangxu')is not nulldrop database zhangxugocre ...
- oracle通过sql随机取表中的10条记录
oracle通过sql随机取表中的10条记录: SELECT * FROM (SELECT * FROM T_USER ORDER BY DBMS_RANDOM.RANDOM()) WHERE Row ...
- SQL将一个表中的某一列值全部插入到另一个表中
1. SQL将一个表中的某一列值全部插入到另一个表中 插入的话: insert into a(col) select col from b; 更新的话: update a set col=selec ...
随机推荐
- RabbitMQ之Fanout交换器模式开发
Fanout模式,即广播模式,一个发送到交换机的消息会被转发到与该交换机绑定的所有队列上. 一.Provider 配置文件 spring.application.name=provider sprin ...
- bower 安装依赖提示 EINVRES Request to https://bower.herokuapp.com/packages/xxx failed with 502
出错提示EINVRES Request to https://bower.herokuapp.com/packages/chai failed with 502 访问 https://bower.he ...
- word: 插入或修改文字时后面的字消失 解决办法
在编辑Word文档中的文字时,我们有时需要插入或修改文字,可是在插入或修改时会发现改动处后面的文字会消失.比如插入或修改3个字,后面的文字随之也会消失3个,这时该怎么办呢? 点击-“文件”-“选项”- ...
- Spring AOP Log
spring aop action中验证用户登录状态 - CASER_HDMI的博客 - CSDN博客https://blog.csdn.net/CASER_HDMI/article/details/ ...
- synchronized 同步对象概念
解决上述问题之前,先理解synchronized关键字的意义如下代码: Object someObject =new Object(); synchronized (someObject){ // ...
- [译]使用Pandas读取大型Excel文件
上周我参加了dataisbeautiful subreddit上的Dataviz Battle,我们不得不从TSA声明数据集创建可视化.我喜欢这种比赛,因为大多数时候你最终都会学习很多有用的东西. 这 ...
- 【429】关于ADT的访问权限
在看老师代码的时候,发现ADT中的 struct 有时候写到了 adt.c 里面,有时候写到了 adt.h 里面,其实有些困惑,经过仔细研究,发现写在 adt.h 中的 struct 可以在 test ...
- SQL Server 2014 清除用户名和密码
网上找来找去都是SQL Server 2008版本或者以前版本的... 后来:http://stackoverflow.com/questions/349668/removing-the-rememb ...
- WebService学习总结(三)——使用JDK开发WebService(转)
一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...
- LeetCode_263. Ugly Number
263. Ugly Number Easy Write a program to check whether a given number is an ugly number. Ugly number ...
