当前位置:首页 > 系统运维 > 正文内容

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

a8116255316年前 (2010-07-02)系统运维5

此文章主要讲述的是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异常处理语法。那时可以通过代码对无法预料的错误有更好的控制。

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://2345hao.cn/blog/index.php/post/21458.html

分享给朋友:

“SQL Server 异常和孤立事务的描述” 的相关文章

windows 7查看电脑近期使用情况确定有没有被他人使用

windows 7查看电脑近期使用情况确定有没有被他人使用

我一个朋友最近装装了Windows 7,他总感觉有人用了他的电脑,但是一直不确定,他想知道有没有人动用他的电脑,问我有没有办法 我说设置一下就行了: 启动Windows 7,在搜索栏中输入编辑组,马上就搜索到了编辑组策略,点击即可启动程序编辑组策略。依次展开组策略左侧树形列表的计算机配置/管理模...

windows 7系统下Windows服务被流氓软件注册怎么办?Windows服务

windows 7系统下Windows服务被流氓软件注册怎么办?Windows服务

解决方法: 其实处理这些使用流氓软件,需要将相关的.exe文件删除,使它不能再运行,或者直接清除这个服务本身,使计算机重启的时候,它不会再启动。比如Hijackthis扫描,在扫描日志中,一般会把非Windows系统的服务以023的方式列出来,如下面这段: O23 - ...

windows 7系统中不能把程序锁定到任务栏的解决方法图文讲解

windows 7系统中不能把程序锁定到任务栏的解决方法图文讲解

最近小编在使用Windows 7的时侯遇到一个问题,就是应用程序和快捷方式不能锁定到任务栏,我当时不知道怎么回事,但是很多现有的方法都不能解决这个问题。现在我把我的解决的方法分享给大家以作参考。 问题分析 经过思考,初步判断出现该问题的原因是由于使用第三方优化软件消除快捷方式的小箭头引起的。...

windows 7/8/xp系统关闭自动播放功能禁止音频媒体自动播放

windows 7/8/xp系统关闭自动播放功能禁止音频媒体自动播放

Windows 7/8系统: 控制面板——自动播放——取消掉为所有媒体和设备设置自动播放 winXP系统: 开始—运行—gpedit.msc—计算机配置—管理模板—系统—关闭自动播放—已启用—所有驱动器—确定  关闭自动运行功能说明: 一旦您将媒体插入驱动器...

windows 7玩战争策略游戏星际争霸花屏问题解决方法

windows 7玩战争策略游戏星际争霸花屏问题解决方法

星际争霸是一款非常经典的战争策略游戏,虽然已有十多年的历史,但依然有一批忠实的游戏玩家坚守着星际战争,而随着Windows系统的不断更新,Windows 7下玩星际争霸已经不能像WinXP那样顺利了,很多Windows 7玩家在玩星际争霸时候都会出现花屏问题,那么我们该如何应对呢 Windo...

windows 7通过禁用nvcpl服务项减少开机时间提高开机速度

windows 7通过禁用nvcpl服务项减少开机时间提高开机速度

电脑开机速度不够快?如何才能加快电脑开机速度呢?今天小编就教大家一个通过禁止nvcpl服务项加快Windows 7电脑开机速度的方法。 解决方法: 1、首先按“WIN+R”组合键打开Windows 7系统的“运行”窗口,输入“services.msc”命令后按回车。 2、在打开的服务窗口中...