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