回滚插入SQL Server

时间:2017-09-19 15:28:01

标签: c# sql sql-server tsql

我的目标是保留3个单独的SQL服务器实例,这些实例在其中一个数据库上有一些表是最新的,这意味着我在一个表上执行的每个插入应该完全在另一个表上完成。 目前我正在使用下面的SP(驻留在所有数据库中):

   ---SP for Inserting a row in myTable
    --IF ANY Errors Occur we rollback and return FALSE
    --ELSE WE Return the ID of the row inserted (integer)

    CREATE PROCEDURE [dbo].[sp_InsertWithRollback] @PartnerId [int]
        --the table fields as parameters

    AS
    DECLARE @TransactionName VARCHAR(20) = 'InsertTrans';

    BEGIN TRY
        BEGIN TRAN @TransactionName

        INSERT INTOmy table (
            ---
            ...
            ...
            )
        VALUES (
            ---
            ...
            ---
            )
        COMMIT;
        SELECT SCOPE_IDENTITY();

    END TRY

    BEGIN CATCH
        ROLLBACK TRAN @TransactionName;
        SELECT 'FALSE';
    END CATCH

在C#程序中我使用循环(对于3个实例中的任何一个) 我在哪里为每个表调用SP。如果在任何这些调用中我得到一个'FALSE'返回而不是一个int,我会检查其他实例并删除给定ID的行。

上述逻辑的问题是,如果我收到错误,我正在删除 - 异常。理想情况下,我想回滚并避免删除。 有什么好主意我怎么用更好的东西替换提交 - 删除---,回滚?

0 个答案:

没有答案