使用事务的存储过程.

  • 格式:doc
  • 大小:38.00 KB
  • 文档页数:3

下载文档原格式

  / 3
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

存储过程中的事务实现

一直以为存储过程会自动实现事务操作,其实不然。存储过程只是提供的事务操作的支持。

要实现事务操作,还得自己实现。

基本上方法有两个:

SET XACT_ABORT

指定当Transact-SQL 语句产生运行时错误时,Microsoft® SQL Server™ 是否自动回滚当前事务。

语法

SET XACT_ABORT { ON | OFF }

注释

当SET XACT_ABORT 为ON 时,如果Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为OFF 时,只回滚产生错误的Transact-SQL 语句,而事务将继续进行处理。编译错误(如语法错误)不受SET XACT_ABORT 的影响。

对于大多数OLE DB 提供程序(包括SQL Server),隐性或显式事务中的数据修改语句必须将XACT_ABORT 设置为ON。唯一不需要该选项的情况是提供程序支持嵌套事务时。有关更多信息,请参见分布式查询和分布式事务。

SET XACT_ABORT 的设置是在执行或运行时设置,而不是在分析时设置。

例:

create proc testproc

as

SET XACT_ABORT on

begin tran

insert into tableA (field1) values ('aa')

insert into tableB (field1) values ('bb')

commit tran

SET XACT_ABORT off

begin tran

/*要实现的操作*/

commit tran

if @@error>0

rollback

例:

create proc testproc

as

begin tran

insert into tableA (field1) values ('aa')

insert into tableB (field1) values ('bb')

commit tran

if@@error>0

rollback

如果Transact-SQL 语句执行成功,则@@ERROR 系统函数返回0;如果此语句产生错误,则@@ERROR 返回错误号。每一个Transact-SQL 语句完成时,@@ERROR 的值都会改变。

因为每个Transact-SQL 语句执行完毕时,@@ERROR 都会得到一个新的值,@@ERROR 可用以下两种方法处理:

1.在Transact-SQL 语句后,马上检测或使用@@ERROR。

2.在Transact-SQL 语句完成后,马上把@@ERROR 存储到一个整型变量中。此变量的值可供以后使用。

@@ERROR 通常用于表示存储过程的成功或失败。整型变量初始化为0。完成每个Transact-SQL 语句后,都要测试@@ERROR 是否为0。如果@@ERROR 不是0,将被存储在变量中。存储过程然后在RETURN 语句中返回变量。如果过程中的Transact-SQL 语句都没有错误,变量保持为0。如果一个或多个语句生成错误,则变量包含最后的错误号。

相关主题