WEB开发网
开发学院数据库MSSQL Server 带你深入了解T-SQL的十一种设计模式 阅读

带你深入了解T-SQL的十一种设计模式

 2008-09-04 10:00:41 来源:WEB开发网   
核心提示: 六、Restorer(恢复) 此模式提供一种在出错时清理资源的机制,为避免孤立一个事务,带你深入了解T-SQL的十一种设计模式(4),当事务活动时,适当地处理出错条件极其重要,缓存它后,如出现错误, 1、出错时回滚事务 IF OBJECT_ID(’procR’) I

六、Restorer(恢复)

此模式提供一种在出错时清理资源的机制。为避免孤立一个事务,当事务活动时,适当地处理出错条件极其重要。

1、出错时回滚事务

  IF OBJECT_ID(’procR’) IS NOT NULL
  drop PROC procR
  GO
  create PROC procR
  AS
  DECLARE @err int
  BEGIN TRAN
  update customers SET city = ’Dallas’
  select 1/0 --设置一个错误
  SET @err = @@ERROR
  IF @err <> 0
  BEGIN
  ROLLBACK TRAN
  RETURN (@err)
  END
  COMMIT TRAN
  GO
  DECLARE @res int
  exec @res = procR
  select @res

注:此模式的关键部分是将错误码@@error缓存至变量@err中,如果不缓存@@error,下一执行成功的语句将重置@@error,缓存它后,如出现错误,将检查@errr的值并回滚该活动事务。

2、出错时清除临时表

  create PROC procR
  AS
  DECLARE @err int
  create TABLE ##myglobal(c1 int)
  insert ##myglobal DEFAULT VALUES
  select 1/0 --设置一个错误
  SET @err = @@ERROR
  IF @err <> 0
  BEGIN
  drop TABLE ##myglobal
  RETURN (@err)
  END
  drop TABLE ##myglobal
  GO
  DECLARE @res int
  exec @res = procR
  select @res

3、主动执行恢复模式

 create PROC procR
  AS
  IF @@TRANcount <> 0 --启动新事务前先回滚旧事务
  ROLLBACK TRAN
  DECLARE @err int
  BEGIN TRAN
  update customers SET city = ’Dallas’
  select 1/0 --设置一个错误
  SET @err = @@ERROR
  IF @err <> 0
  BEGIN
  ROLLBACK TRAN
  RETURN (@err)
  END
  COMMIT TRAN
  GO
  DECLARE @res int
  exec @res = procR
  select @res

上一页  1 2 3 4 5 6 7 8  下一页

Tags:深入 了解 SQL

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