如果有任何失敗,則回滾整個sql插入我正在嘗試在不同的表上運行多個插入,如果有任何失敗,我希望它們全部回滾。 現在我有sql代碼工作,它正在回滾,但它沒有提出odbc錯誤。 JMP只返回一個缺失值。任何人都知道如何確保raiserror()在ODBC上正確顯示?如果我直接在SQL中運行相同的代碼,它會正確引發錯誤。
dbc = Create database connection("DRIVER=SQL SERVER;SERVER=.\;Database=Test");
rfail = executeSQL(dbc,
"
DECLARE @TransactionName varchar(20) = 'Transaction1';
BEGIN TRY
BEGIN TRAN @TransactionName
INSERT INTO [dbo].Test1
(A --varchar
,B --Int
)
VALUES
('Test Fail'
,1
)
DECLARE @ID bigint
SELECT @ID = SCOPE_IDENTITY()
INSERT INTO [dbo].Test2
(T1ID --Test1 ID
,A --varchar
)
VALUES
(@ID
,14
)
COMMIT TRAN @TransactionName
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
IF @@TRANCOUNT > 0
ROLLBACK TRAN @TransactionName
SELECT
@ErrorMessage=ERROR_MESSAGE(),
@ErrorSeverity=ERROR_SEVERITY(),
@ErrorState=ERROR_STATE();
RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState)
END CATCH
",
);
close database connection(dbc);
Re:如果有任何失敗,則回滾整個sql插入 @vince_faller ,我仍然認為自己是一個SQL“黑客”,所以絕不是專家。只是查看你的SQL並知道BEGIN TRAN以COMMIT TRAN或ROLLBACK TRAN結束,也許用於捕獲錯誤消息的SQL的SELECT部分應該在ROLLBACK之前發生???
這只是一個瘋狂的猜測。如果您找到解決方案,請發布。
Re:如果有任何失敗,則回滾整個sql插入沒愛。 仍然沒有得到回報。
Re:如果有任何失敗,則回滾整個sql插入這是一個粗略的解決方案,但在您執行事務之前,請將值插入狀態表(如“Processing”)並提交。
然後做你的交易。 執行提交後,將狀態表值更改為“完成”。 如果您的交易失敗並且您跳轉到回滾部分,您的狀態表仍將顯示“正在處理”。 因此,在調用主要事務後,請檢查您的狀態表。 如果仍然顯示“正在處理”,您將知道已執行回滾。