当存储过程中的任何插入语句失败时回滚整个txn
问题描述:
我有一个存储过程,其中有两个不同的表的两个插入语句。当存储过程中的任何插入语句失败时回滚整个txn
create procedure p_multiple_insert
(
// variable declaration
)
declare @temp int = 0;
begin try
begin
// insert statement for TABLE1
set @temp = 1;
if(@temp = 1)
begin
// insert statement for TABLE2
end
end
end try
begin catch
// insert into error table error_number() & error_message()
end catch
如果第一个插入语句块发生错误,@temp = 0
。因此第二个插入块不会执行,并且数据也不会插入到TABLE1中。
但是,如果插入到TABLE2时发生错误,我该如何回滚我的整个事务。我的意思是回滚第一次插入语句。
答
我的变化是大写:
create procedure p_multiple_insert
(
-- variable declaration
)
declare @temp int = 0;
BEGIN TRANSACTION
begin try
-- insert statement for TABLE1
set @temp = 1;
if(@temp = 1)
begin
-- insert statement for TABLE2
end
end
COMMIT TRANSACTION
end try
begin catch
ROLLBACK TRANSACTION
-- insert into error table error_number() & error_message()
end catch
- 之初
- COMMIT在try块的结束BEGIN TRANSACTION
- ROLLBACK一切都在追赶块
我的“标准Catch-Block”总是如下所示:
DECLARE @errmsg NVARCHAR(MAX)
SELECT @errmsg = 'Error executing dbo.StoredProcName: '
+ COALESCE(ERROR_MESSAGE(),'No Message from SQL Server')
RAISERROR(@errmsg,16,1)
ROLLBACK TRANSACTION
+0
感谢您的回复! ! – user4221591
我认为这个问题是你在找什么:http://dba.stackexchange.com/questions/31279/transaction-and-try-catch-in-sql-server-job –