请问在存在过程中编写 多条语句 是否需要在每条语句下 都 加上
if(@@ERROR<>0) begin rollback tran select 0 end
上面这个语句来 进行判断是否需要回滚。如果每条都加的话 一旦语句一多 满屏幕都是 这个语句。就比如有10条查询语句 查询出来的结果分别存放到变量里面然后通过变量 再来10条插入语句。总共加起来20条。就需要 20个上面的语句来 判断其中如果有一条语句执行出错就回滚。请问有没有什么简便方法 可以不用写这么多 判断的。
只要开头加上 SET XACT_ABORT ON 即可
http://msdn.microsoft.com/zh-cn/library/ms188792(v=SQL.105).aspx
补充解释
USE AdventureWorks2008R2; GO IF OBJECT_ID(N't2', N'U') IS NOT NULL DROP TABLE t2; GO IF OBJECT_ID(N't1', N'U') IS NOT NULL DROP TABLE t1; GO CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY); CREATE TABLE t2 (a INT NOT NULL REFERENCES t1(a)); GO INSERT INTO t1 VALUES (1); INSERT INTO t1 VALUES (3); INSERT INTO t1 VALUES (4); INSERT INTO t1 VALUES (6); GO SET XACT_ABORT OFF; GO BEGIN TRANSACTION; INSERT INTO t2 VALUES (1); INSERT INTO t2 VALUES (2); -- Foreign key error. INSERT INTO t2 VALUES (3); COMMIT TRANSACTION; GO SET XACT_ABORT ON; GO BEGIN TRANSACTION; INSERT INTO t2 VALUES (4); INSERT INTO t2 VALUES (5); -- Foreign key error. INSERT INTO t2 VALUES (6); COMMIT TRANSACTION; GO -- SELECT shows only keys 1 and 3 added. -- Key 2 insert failed and was rolled back, but -- XACT_ABORT was OFF and rest of transaction -- succeeded. -- Key 5 insert error with XACT_ABORT ON caused -- all of the second transaction to roll back. SELECT * FROM t2; GO
DECLARE @ErrCount int; BEGIN TRAN; --1.TODO 执行操作 SELECT @ErrCount=@@ERROR; --2.TODO 执行操作 SELECT @ErrCount=@ErrCount+@@ERROR; IF(@ErrCount>0) BEGIN ROLLBACK TRAN; --TODO END ELSE BEGIN COMMIT TRAN; --TODO END
一楼的就可以
可以使用goto语句简化