SQL Server 异常和孤立事务的描述

数据库 SQL Server
以下的文章主要是介绍SQL Server 异常和孤立事务,以下就是对其具体方案的描述,希望在你今后的学习中会对你有所帮助。

此文章主要讲述的是SQL Server 异常和孤立事务,我前两天在相关网站看见SQL Server 异常和孤立事务的相关资料,觉得挺好,就拿出来供大家分享,以下就是文章的详细内容介绍,望大家借鉴。

 一、首先从SQLServer中Error讲起,SQL中错误处理有些怪辟 错误级别同是16但结果都不同。

以下是引用片段:

select * from 一个不在的表

 

if @@error<>0

 

print '这个没有输出'

 

go

 

raiserror('',16,3)

if @@error<>0

 

print '这个输出了'

 

go

 

exec('select * from 一个不在的表')

if @@error<>0

 

print '这个输出了'

 

go

 

exec sp_executesql N'select * from 一个不在的表'

if @@error<>0

 

print '这个输出了'

 

 

这样你可以发现通过exec或sp_executesql执行可疑的sql,这样就可以在后面捕捉到被SQL Server异常终止的错误。

 

二、引出孤立事务:

1、孤立事务的产生

以下是引用片段:

select @@trancount 当前连接的活动事务数 --当前连接的活动事务数为0

 

begin tran

select * from 一个不在的表

if @@error<>0

 

begin

 

print '没有执行到这里来!'

 

if @@trancount<>0 rollback tran

 

end

 

commit tran

 

select @@trancount 当前连接的活动事务数 --执行后你看看 当前连接的活动事务数为1,且重复执行会每次累加,这是很耗资源的。

 

应为rollback根本就没有被回滚。

2、使用现有手段解决孤立事务

 

以下是引用片段:

 

print @@trancount print '当前连接的活动事务数' --当前连接的活动事务数为0

 

if @@trancount<>0 rollback tran --在这里写可以让孤立事务只保持到下次你的过程被调用

begin tran

 

select * from 一个不在的表

if @@error<>0

 

begin

 

print '没有执行到这里来!'

 

if @@trancount<>0 rollback tran

 

end

 

commit tran

 

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

 

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

三、使用 set xact_abort 来控制部分违反约束的错误的执行过程

以下是引用片段:

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

 

go

drop table table1

 

但 set xact_abort 对于编译产生的错误确没有起作用,且同样会产生孤立事务

set xact_abort on

begin tran

 

insert 一个不在的表 values(10)

 

print '这里没有被执行'

 

commit tran

 

go

 

print '' print '==============================================' print ''

set xact_abort off

begin tran

 

insert 一个不在的表 values(10)

 

print '这里没有被执行'

 

commit tran

 

go

 

select @@trancount 当前连接的活动事务数 ---有两个孤立事务

if @@trancount<>0 rollback tran

 

 

对于sql中怪辟的各种错误,和孤立事务在t-sql编程中一定要注意,小心孤立事务的陷阱,尽量避免浪费或孤立资源,Microsoft公开宣布过SQLServe下一版本Yukon将有内置SQL Server异常处理语法。那时可以通过代码对无法预料的错误有更好的控制。

 

【编辑推荐】

  1. 实现SQL Server数据库同步的准实时方案很简单
  2. SQL Server数据库如何正确加密?
  3. 如何实现SQL Server临时表的创建?
  4. SQL Server查询优化的好用方案
  5. SQL Server数据库中优化索引的妙招

 

责任编辑:佚名 来源: csdn.net
相关推荐

2011-04-02 15:22:42

SQL server

2010-07-05 13:29:56

2009-04-09 11:17:48

2010-06-17 15:09:49

SQL Server

2010-07-07 10:54:22

SQL Server索

2010-06-28 13:56:16

SQL Server代

2010-07-07 09:27:15

SQL Server索

2010-07-19 18:04:23

SQL Server锁

2010-07-09 10:08:53

SQL Server函

2010-07-20 08:35:54

SQL Server锁

2010-09-27 10:59:23

SQL SERVER事

2010-10-19 13:52:28

SQL Server事

2010-07-20 09:15:03

SQL Server

2010-07-16 16:05:44

SQL Server更

2010-07-07 09:47:04

SQL Server索

2010-06-18 13:41:33

SQL Server

2010-07-19 16:17:41

SQL Server聚

2010-07-14 15:32:28

SQL Server

2010-07-09 17:16:53

SQL Server数

2010-07-02 08:53:06

MIS SQL Ser
点赞
收藏

51CTO技术栈公众号