使用事务的存储过程.
- 格式:doc
- 大小:38.00 KB
- 文档页数:3
存储过程中的事务实现
一直以为存储过程会自动实现事务操作,其实不然。存储过程只是提供的事务操作的支持。
要实现事务操作,还得自己实现。
基本上方法有两个:
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。如果一个或多个语句生成错误,则变量包含最后的错误号。