WEB开发网
开发学院数据库MSSQL Server SQL Server的怪辟:异常与孤立事务 阅读

SQL Server的怪辟:异常与孤立事务

 2007-11-11 11:40:43 来源:WEB开发网   
核心提示: ·如何使用sql server(WINDOWS平台上强大的数据库平台)客户端配置工具·SQL2000无法安装的解决办法·sql server(WINDOWS平台上强大的数据库平台)2000 索引结构及其使用·全面接触SQL语法·SQL语法参考手册(
    ·如何使用sql server(WINDOWS平台上强大的数据库平台)客户端配置工具
    ·SQL2000无法安装的解决办法
    ·sql server(WINDOWS平台上强大的数据库平台)2000 索引结构及其使用
    ·全面接触SQL语法
    ·SQL语法参考手册(SQL)
    ·ms sql删除重复的记录
    ·PL/SQL开发中动态SQL的使用方法
    ·很久以前的一个sql面试题及答案.
    ·Transact SQL 常用语句以及函数
    ·sql server(WINDOWS平台上强大的数据库平台)连接失败错误分析与排除
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将有内置异常处理语法。那时可以通过代码对无法预料的错误有更好的控制。

上一页  1 2 

Tags:SQL Server 异常

编辑录入:coldstar [复制链接] [打 印]
赞助商链接