SQLServer的怪辟:异常与孤立事务[1]

SQLServer的怪辟:异常与孤立事务[1],第1张

SQLServer的怪辟:异常与孤立事务[1],第2张

首先,从SQLServer中的错误开始。SQL中的错误处理有点奇怪。误差水平同为16,但结果不同。

下面是一个引用片段:
select * from a missing table
if @ @ error 0
print ' this one no output '
go
raiserror(',16,3)
if @

exec(' select * from a less table ')
if @ @ error 0
print ' this output '
go

exec sp _ execute SQL N ' select * from a seen table '
if @ @ error 0
print ' this output '


这样可以发现exec或sp_executesql执行的可疑sql,以便以后捕捉异常终止错误。

第二,导致孤立事件:

1、孤立交易的产生

以下是一段引文:
select @@trancount当前连接的活动事务数-当前连接的活动事务数为0
begin tran

如果@ @ error 0
begin
print ' not executed here!',则Select * from an缺席的表

if @ @ tran count 0 roll back tran
end

提交事务


select @@trancount当前连接的活动事务数——执行后可以看到当前连接的活动事务数为1,重复执行每次都会累加,非常消耗资源。

应该是rollback根本没有回滚。

2.利用现有手段解决孤立事务。


引用如下:
print @@trancount print '当前连接的活动事务数'-如果@ @ Tran count 0 roll back Tran-在此处写入只能保留隔离的事务,直到下次调用您的过程
begin tran。

如果@ @ error 0
begin
print ' not executed here!',则Select * from an缺席的表

if @ @ tran count 0 roll back tran
end

提交事务


-执行后可以看到当前连接的活动事务数为1,但重复执行不会累加。

Print @@trancount print '当前连接的活动事务数'

第三,使用set xact_abort控制一些违反约束的错误的执行过程。

下面是引用的片段:
create table table 1(a int check(a > 100))
go
set Xact _ abort on
begin tran
insert table 1 values(10)
Print ' not executed here '
commit tran
go

Print ' ' Print ' = = = = = = = = = = = = = = = = = = = = = = = = Xact _ abort off

go
删除表table1

但是,set xact_abort在编译错误中不起作用,它还会产生孤立的事务。

xact _ abort on
begin trans
insert a absent table values(10)
print ' not executed here '
commit trans
go

打印''打印' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = '打印''

xact _ abort off
begin trans
insert a absent table values(10)
print ' not executed here '
commit trans
go

Select @@trancount当前连接的活动事务数-如果@ @ trancount0Rollback Tran
,则有两个孤立事务


在t-sql编程中一定要注意sql中的各种奇怪错误和孤立事务。当心孤立事务的陷阱,尽最大努力避免浪费或孤立资源。微软已经公开宣布SQLServe Yukon的下一个版本将有一个内置的异常处理语法。这时候,意外的错误可以通过代码得到更好的控制。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » SQLServer的怪辟:异常与孤立事务[1]

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情