一、首先从SQLServer中Error讲起,SQL中错误处理有些怪辟 错误级别同是16但结果都不同。 以下是引用片段: exec(select * from 一个不在的表) exec sp_executesql Nselect * from 一个不在的表 二、引出孤立事务: 1、孤立事务的产生 以下是引用片段: select * from 一个不在的表 commit tran 应为rollback根本就没有被回滚。 以下是引用片段: select * from 一个不在的表 commit tran print @@trancount print 当前连接的活动事务数 三、使用 set xact_abort 来控制部分违反约束的错误的执行过程 以下是引用片段: go 但 set xact_abort 对于编译产生的错误确没有起作用,且同样会产生孤立事务 set xact_abort on print print ============================================== print set xact_abort off select @@trancount 当前连接的活动事务数 —有两个孤立事务
select * from 一个不在的表
if @@error<>0
print 这个没有输出
go
raiserror(,16,3)
if @@error<>0
print 这个输出了
go
if @@error<>0
print 这个输出了
go
if @@error<>0
print 这个输出了
这样你可以发现通过exec或sp_executesql执行可疑的sql,这样就可以在后面捕捉到被异常终止的错误。
select @@trancount 当前连接的活动事务数 –当前连接的活动事务数为0
begin tran
if @@error<>0
begin
print 没有执行到这里来!
if @@trancount<>0 rollback tran
end
select @@trancount 当前连接的活动事务数 –执行后你看看 当前连接的活动事务数为1,且重复执行会每次累加,这是很耗资源的。
2、使用现有手段解决孤立事务
print @@trancount print 当前连接的活动事务数 –当前连接的活动事务数为0
if @@trancount<>0 rollback tran –在这里写可以让孤立事务只保持到下次你的过程被调用
begin tran
if @@error<>0
begin
print 没有执行到这里来!
if @@trancount<>0 rollback tran
end
—执行后你看看 当前连接的活动事务数为1,但重复执行不会累加
create table Table1 (a int check(a>100))
go
set xact_abort on
begin tran
insert table1 values(10)
print 这里没有被执行
commit tran
go
print print ============================================== print
set xact_abort off
begin tran
insert table1 values(10)
print 这里被执行
commit tran
drop table table1
begin tran
insert 一个不在的表 values(10)
print 这里没有被执行
commit tran
go
begin tran
insert 一个不在的表 values(10)
print 这里没有被执行
commit tran
go
if @@trancount<>0 rollback tran
对于sql中怪辟的各种错误,和孤立事务在t-sql编程中一定要注意,小心孤立事务的陷阱,尽量避免浪费或孤立资源,Microsoft公开宣布过SQLServe下一版本Yukon将有内置异常处理语法。那时可以通过代码对无法预料的错误有更好的控制。
sql server的怪辟:异常与孤立事务_数据库技巧
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » sql server的怪辟:异常与孤立事务_数据库技巧
相关推荐
-      sql语句中的判断功能的使用方法
-      sql语句中的判断功能的使用方法
-      SQL语言中去掉小数点有效数字后面的所有0
-      在sql语句中实现md5功能
-      ASP连接各种数据库的代码
-      给access数据库减肥
-      asp连接access数据库代码(2)
-      更改 SQL Server 登录模式