在SQL事务中,我们可以跳过回滚到特定表并回滚其他表吗

在SQL事务中,我们可以跳过回滚到特定表并回滚其他表吗,sql,sql-server,Sql,Sql Server,我有一个类似于下面的存储过程 CREATE PROC Usp_InsertData(@ID INT, @Name varchar(max)) AS BEGIN TRY BEGIN TRANSACTION INSERT INTO Employee1(ID,[Name]) VALUES(@ID,@Name); INSERT INTO Employee2(ID,[Name]) VALUES(@ID,@Name); INSERT INTO Emplo

我有一个类似于下面的存储过程

CREATE PROC Usp_InsertData(@ID INT, @Name varchar(max))
    AS
    BEGIN TRY
    BEGIN TRANSACTION

    INSERT INTO Employee1(ID,[Name]) VALUES(@ID,@Name);

    INSERT INTO Employee2(ID,[Name]) VALUES(@ID,@Name);

    INSERT INTO Employee3(ID,[Name]) VALUES(@ID,@Name);

    INSERT INTO Employee4(ID,[Name]) VALUES(@ID,@Name);

   COMMIT TRANSACTION
    END TRY
    BEGIN CATCH
    ROLLBACK TRANSACTION

    END CATCH
我的要求是,如果出现任何问题,那么应该调用in-catch回滚。此回滚应仅在跳过Employee1表的Employee2、Employee3、Employee4上发生

最后,我将只在Employee1和其他回滚中实现数据

有没有办法从事务回滚中跳过特定的表

更新1:

我从主SP调用上面的SP,如下所示。因此,即使主SP事务失败,所有更改都需要回滚,Employee1除外

CREATE PROC Usp_MasterInsertData(@ID INT,@Name varchar(max))
AS
BEGIN TRY
BEGIN TRANSACTION

EXEC Usp_InsertData @ID,@Name --In this SP, I want to skip rollback to Employee1 table.

EXEC Usp_UpdateData @ID,@Name

COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION


END CATCH

在第一次插入后添加事务,如

 CREATE PROC Usp_InsertData(@ID INT, @Name varchar(max))
        AS


        INSERT INTO Employee1(ID,[Name]) VALUES(@ID,@Name); 

        BEGIN TRY  
        BEGIN TRANSACTION

        INSERT INTO Employee2(ID,[Name]) VALUES(@ID,@Name);

        INSERT INTO Employee3(ID,[Name]) VALUES(@ID,@Name);

        INSERT INTO Employee4(ID,[Name]) VALUES(@ID,@Name);

       COMMIT TRANSACTION
        END TRY
        BEGIN CATCH
        ROLLBACK TRANSACTION

        END CATCH

为什么有4个不同的员工表?!?我只是把它们作为例子。请把所有的表看作不同的表。把第一个插入项从事务中取出怎么样?您可以在第一次插入后使用
SAVE TRANSACTION
生成保存点,然后回滚到该点。一般来说,它的用途非常有限,但在这种特定情况下,它可能有一些应用。在你使用它之前要意识到它;从客户端代码进行显式事务处理通常要好得多。将其拆分为两个事务。在一个表中插入第一个表。然后插入其他的。