我正在尝试在SQL Server 2008过程中实现自治事务。该过程将只有两个嵌套的事务,InnerTransaction
将提交,但OuterTransaction
将回滚。
我已经看到很多成功实现逆向过程的例子。但是我没有找到解决问题的方法。
示例表脚本
create table testTab1(id int identity(1,1) primary key, name varchar(100));
create table testTab2(id int , name varchar(100));
insert into testTab1(name) values('User1'),('User2'),('User3');
procudure的示例代码
CREATE PROCEDURE [dbo].[testSP2]
AS
BEGIN
SET IMPLICIT_TRANSACTIONS ON
BEGIN TRAN
insert into testTab1(name) values('User4'),('User5'),('User6');
IF @@ROWCOUNT>0
BEGIN
SAVE TRAN InnerTran
insert into testTab2(id,name) values(1,'User4'),(2,'User5'),(3,'User6');
--PRINT 'NUMBER OF TRAN='+CAST(@@TRANCOUNT AS VARCHAR(5))
COMMIT TRAN InnerTran
END
ROLLBACK
SET IMPLICIT_TRANSACTIONS OFF
END
我想要的输出是
答案 0 :(得分:0)
为了正义起见,有一个链接的环回服务器解决方法来模仿SQL Server上的自治事务:
答案 1 :(得分:0)
另一个博客,但写得很好,展示了模仿 Oracle 出色的自治事务功能的每个“黑客”。我期待着 SQL Server 中存在此功能的世界。
注意:出于某种原因,当您向 SQL Server 人员提出这个问题时,他们会看着您,就像您疯了一样,并开始问诸如“您为什么需要那个……为什么有人需要那个?”之类的问题。现在我在 SQL Server 商店,我得到了很多。只要知道,如果您来自 Oracle……一个具有强大而深入的功能的数据库,例如内置的出色搜索算法和出色的字符串解析和操作功能,您会在深入了解 SQL Server 后发现它缺乏这些功能。不要误会我的意思... SQL Server 可以很好地完成很多事情,例如表变量和临时表,以及将 T-SQL 与正常 SQL 混合的能力。 Oracle 将其 PL-SQL 与其 SQL 引擎分开,这是 Oracle 的一大缺点。优点和缺点。