事务和锁:https://www.cnblogs.com/knowledgesea/p/3714417.html
1:建立日志表Error
2:在事务,触发器,等sql语句中添加try-catch语句
3:如果出错,插入日志表
注意:如果在插入日志表语句在事务中,事务特性,不能插入,需要移到事务结束后插入。
1 create table Error( 2 ErrorNumber varchar(100), 3 ErrorSeverity varchar(100), 4 ErrorState varchar(100), 5 ErrorProcedure varchar(200), 6 ErrorLine varchar(100), 7 ErrorMessage varchar(max)) 8 9 create table lives(Eat varchar(100),Play varchar(100),Numb int) 10 select * from [dbo].[Error] 11 12 select * from lives 13 14 ---开启事务 15 --begin tran 16 --错误扑捉机制,看好啦,这里也有的。并且可以嵌套。 17 begin try 18 --语句正确 19 insert into lives (Eat,Play,Numb) values ('猪肉','足球',1) 20 --Numb为int类型,出错 21 insert into lives (Eat,Play,Numb) values ('猪肉','足球','abc') 22 --语句正确 23 insert into lives (Eat,Play,Numb) values ('狗肉','篮球',2) 24 end try 25 begin catch 26 select Error_number() as ErrorNumber, --错误代码 27 Error_severity() as ErrorSeverity, --错误严重级别,级别小于10 try catch 捕获不到 28 Error_state() as ErrorState , --错误状态码 29 Error_Procedure() as ErrorProcedure , --出现错误的存储过程或触发器的名称。 30 Error_line() as ErrorLine, --发生错误的行号 31 Error_message() as ErrorMessage --错误的具体信息 32 33 insert into [dbo].[Error] values( 34 Error_number() , --错误代码 35 Error_severity() , --错误严重级别,级别小于10 try catch 捕获不到 36 Error_state() , --错误状态码 37 Error_Procedure() , --出现错误的存储过程或触发器的名称。 38 Error_line() , --发生错误的行号 39 Error_message() --错误的具体信息 40 ) 41 --if(@@trancount>0) --全局变量@@trancount,事务开启此值+1,他用来判断是有开启事务 42 -- rollback tran ---由于出错,这里回滚到开始,第一条语句也没有插入成功。 43 end catch 44 if(@@trancount>0) 45 commit tran --如果成功Lives表中,将会有3条数据。 46 47 --表本身为空表,ID ,Numb为int 类型,其它为nvarchar类型 48 select * from lives
浙公网安备 33010602011771号