Sql 我可以打开两个不同名称的交易吗
我可以在下面这样的存储过程中有2个事务吗?如果我回滚TRAN1,它会回滚所有TRAN2吗?我在这里迷路了,任何反馈都会有所帮助。提前谢谢Sql 我可以打开两个不同名称的交易吗,sql,sql-server,transactions,Sql,Sql Server,Transactions,我可以在下面这样的存储过程中有2个事务吗?如果我回滚TRAN1,它会回滚所有TRAN2吗?我在这里迷路了,任何反馈都会有所帮助。提前谢谢 BEGIN TRANSACTION TRAN1 WHILE(...) BEGIN BEGIN TRANSACTION TRAN2 BEGIN TRY ..... ..... ..... COMMIT TRANSACTION TRAN2
BEGIN TRANSACTION TRAN1
WHILE(...)
BEGIN
BEGIN TRANSACTION TRAN2
BEGIN TRY
.....
.....
.....
COMMIT TRANSACTION TRAN2
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION TRAN2
END CATCH
END
COMMIT TRANSACTION TRAN1
无论有多少事务,外部回滚都会回滚所有事务 当您嵌套事务(如本例中所述)时,每次提交/回滚都会增加或减少@@trancount 从MSDN 每个BEGIN TRANSACTION语句都将@TRANCOUNT递增一。每个提交事务或提交工作语句将@@TRANCOUNT递减1 使用一组嵌套事务中最外层事务的事务名称的回滚事务回滚所有嵌套事务,并将@TRANCOUNT递减为0 你也可以看到这一点: 下面是测试此行为的演示
if object_id('t1','u') is not null
drop table t1
create table t1
(
id int
)
go
begin tran outertran
select @@trancount--1
insert into t1
select 1
begin tran innertran
select @@trancount--2
insert into t1
select 2
/**below throws error,since you can reference only outer transaction
-referrring inner tran is not legal
***/
--rollback tran innertran
/***
error you get by uncommneting above
Msg 6401, Level 16, State 1, Line 20
Cannot roll back innertran. No transaction or savepoint of that name was found.
**/
commit tran innertran
select @@trancount--1
rollback --rollbacks all
select * from t1
参考文献:您可能需要阅读以下内容: