全接触sqlserver异常与孤立事务

2016-01-29 16:45 5 1 收藏

全接触sqlserver异常与孤立事务,全接触sqlserver异常与孤立事务

【 tulaoshi.com - SQLServer 】

 一、首先从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,这样就可以在后面捕捉到被异常终止的错误。

二、引出孤立事务:
  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(a100))
  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 ’’’’
  

来源:http://www.tulaoshi.com/n/20160129/1499474.html

延伸阅读
本专题旨在为广大共享上网用户提供可选方案和技术上的支持。由于宽带上网的形式和方法多种多样,本专题不可能涵盖所有的技术方案,但相关的方法可作为参考和借鉴。随着共享上网限制措施的不断发展,共享上网仍然会是一个长远的话题,我们有必要了解一下它的原理和基本实现方法。 共享上网原理与方法概述 一、局域网共享上网原...
标签: ASP
第一节、利用系统表注入SQLServer数据库 SQLServer是一个功能强大的数据库系统,与操作系统也有紧密的联系,这给开发者带来了很大的方便,但另一方面,也为注入者提供了一个跳板,我们先来看看几个具体的例子:  ①http://Site/url.asp?id=1;exec master..xp_cmdshell “net user name password ...
一张湘绣汇集了湘女累月的心血,我们称之为劳动密集型,一块芯片集聚着众多高新的科技,我们称之为技术密集型,一个实例承载了丰富的知识点,是否可以称为知识密集型呢:)?用一张网捞到更多的鱼是渔夫的追求,通过一个实例学到更多的知识点则是我们这些开发人员的企盼。 本文拟通过一个耳熟能详的指法练习游戏讲解如何在JBuilder 2005...
标签: Web开发
元素和标签是WML的主要语法,它们决定了WML编程的基本原则。本章我们将从WML的元素、标签、属性等方面详细讲解WML的编程方法。学习本章知识之前,读者应当了解WML元素与标签的区别。WML的元素通常有一个首标签、内容、其它元素及一个尾标签组成。也就说,单独的标签是一个元素,成对出现的标签与其包含的内容也构成一个元素。由于元素牵涉及标签...
家庭护理全接触 刚出院的早产宝宝柔弱而娇嫩,相比足月宝宝,对他们的照顾需要你倍加细心和耐心。 和噪音、强光“躲猫猫” 早产宝宝的视听觉功能发育往往不成熟,接受声光刺激的能力相对较弱,过多的刺激会影响孩子正常的神经发育、睡眠和体重增加。 早产宝宝对光线刺激较为敏感,太亮或太暗都不利于孩子大脑和视力发育...

经验教程

104

收藏

74
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部