在SQL SERVER中实现事务的部分回...

1.保存点:是一种实现部分回滚的方法。可以给一个保存点起一个名字,以便在后面的事务中可以回滚到保存点。
2.实现代码。
BEGIN TRANSACTION Transaction_Name
SQL_Statement1
SQL_Statement2
SAVE TRANSACTION Save_Name --设置保存点
SQL_Statement3
SQL_Statement4
IF Test_Condition_Fails
ROLLBACK TRANSACTION Save_Name --回滚到保存点
SQL_Statement5
SQL_Statement6
COMMIT TRANSACTION Transaction_Name

BEGIN TRANSACTION Transaction_Name
SQL_Statement1
SQL_Statement2
SAVE TRANSACTION Save_Name --设置保存点
SQL_Statement3
SQL_Statement4
IF Test_Condition_Fails)
BEGIN
ROLLBACK TRANSACTION Save_Name --回滚到保存点
RETURN
END
ELSE
BEGIN
SQL_Statement5
SQL_Statement6
END
COMMIT TRANSACTION Transaction_Name
3.如果没有保存点时,ROLLBACK命令后面只能跟最外层事务的名字,而不能跟其他事务的名字。不论ROLLBACK命令在嵌套那一层发生时,如果其后没有事务名,则将事务回滚整个事务到顶层,这和回滚最外层事务是一样的。在嵌套事务中,不能仅回滚某一层事务,除非你指定了一个保存点,然后回滚到保存点。
另:SET XACT_ABORT
指定当 Transact-SQL 语句产生运行时错误时,Microsoft? SQL Server&S482; 是否自动回滚当前事务。
语法
SET XACT_ABORT { ON | OFF }
注释
当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。编译错误(如语法错误)不受 SET XACT_ABORT 的影响。
应用举例如下,供参考.
SQL codecreatetable t2 (ID INT PRIMARY KEY) --新建测试表,ID是主键.SET XACT_ABORT ON --开启事务自动回滚begin tran insert into t2 select 1 insert into t2 select 2 insert into t2 select 2 --制造主键重复的错误. insert into t2 select 3commit transelect ID from t2 -->空表,因事务过程错误,全部自动回滚.--如果未加 SET XACT_ABORT ON 则select ID from t2ID---- 1 2 3
Tags: 

延伸阅读

最新评论

发表评论