By executing a procedure with parameters stored exec OpreateTB data ( 'OpreateUser', 'IsRun' ) update the table
Table Structure: (RunTime, RunStatus, BetweenTime, RunLog, IsRun).
Field Explanation:
1, the execution time RunTime this statement
2, RunStatus whether the statement is successful indicating success 0 1 NULL indicates abnormality has not been performed is -1 for rollback
3, BetweenTime: the statement is executed by the time
4, RunLog execution returns results message (Affects 1)
. 5, IsRun: 0 indicates whether the statement is not executed, an execution indicates
execution error if statements directly rolled back and Runlog are updated to 'rollback'.
According to the statement execution OrderNumber ascending order.
-
--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
-
Here with a stored procedure to achieve:
-
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