如何确保嵌套事务彼此独立地提交?

Cal*_*era 8 t-sql sql-server transactions commit

如果我有一个存储过程使用不同的参数多次执行另一个存储过程,是否可以让这些调用中的每一个独立于其他调用?

换句话说,如果嵌套过程的前两次执行成功,但第三次执行失败,是否可以保留前两次执行的结果(而不是回滚)?

我在SQL Server 2000中定义了类似这样的存储过程:

CREATE PROCEDURE toplevel_proc ..
AS
BEGIN

         ...

         while @row_count <= @max_rows
    begin
        select @parameter ... where rownum = @row_count 
        exec nested_proc @parameter
        select @row_count = @row_count + 1
    end

END
Run Code Online (Sandbox Code Playgroud)

gbn*_*gbn 8

首先,SQL Server中没有嵌套事务

但是,你可以使用SAVEPOINTs作为这个例子(太长时间在这里再现,抱歉)来自SO用户Remus Rusanu

编辑:AlexKuznetsov提到(他删除了他的答案),如果交易注定失败,这将不起作用.SET XACT_ABORT ON或某些触发错误可能会发生这种情况.