如何在SQL Server 2008中实现自治事务?

时间:2016-10-18 19:45:34

标签: sql-server database sql-server-2008 tsql transactions

我正在尝试在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

我想要的输出是

enter image description here

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

另一个博客,但写得很好,展示了模仿 Oracle 出色的自治事务功能的每个“黑客”。我期待着 SQL Server 中存在此功能的世界。

https://techcommunity.microsoft.com/t5/sql-server/how-to-create-an-autonomous-transaction-in-sql-server-2008/ba-p/383471

注意:出于某种原因,当您向 SQL Server 人员提出这个问题时,他们会看着您,就像您疯了一样,并开始问诸如“您为什么需要那个……为什么有人需要那个?”之类的问题。现在我在 SQL Server 商店,我得到了很多。只要知道,如果您来自 Oracle……一个具有强大而深入的功能的数据库,例如内置的出色搜索算法和出色的字符串解析和操作功能,您会在深入了解 SQL Server 后发现它缺乏这些功能。不要误会我的意思... SQL Server 可以很好地完成很多事情,例如表变量和临时表,以及将 T-SQL 与正常 SQL 混合的能力。 Oracle 将其 PL-SQL 与其 SQL 引擎分开,这是 Oracle 的一大缺点。优点和缺点。

相关问题