Avi*_*hek 5 t-sql database sql-server transactions sql-server-2008
我正在尝试在 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');
Run Code Online (Sandbox Code Playgroud)
程序示例代码
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
Run Code Online (Sandbox Code Playgroud)
我想要的输出是
另一个博客,但写得很好,展示了模仿 Oracle 出色的自主事务功能的每个“黑客”。我期待 SQL Server 中存在此功能。
注意:出于某种原因,当你向 SQL Server 人员提出这个问题时,他们会看着你,就像你疯了一样,并开始问诸如“为什么你需要那个......为什么有人需要那个?”之类的问题。现在我在 SQL Server 商店里,我经常听到这样的情况。只要知道,如果您来自 Oracle……一个具有强大而深入的功能的数据库,例如内置的出色搜索算法以及出色的字符串解析和操作功能,您在深入研究 SQL Server 后会发现它缺乏这些功能。不要误会我的意思... SQL Server 在很多方面都做得很好,例如表变量和临时表,以及将 T-SQL 与普通 SQL 正确混合的能力。Oracle 将 PL-SQL 与其 SQL 引擎分开,这是 Oracle 的一大缺点。优点和缺点。