0

3 つのテーブルにデータを挿入します (私のプロセスによると)。ただし、データは 3 つのテーブルに入力する必要があります。それ以外の場合は、トランザクションをロールバックしたいと考えています。例:- データが 2 つのテーブルに挿入され、テーブル 3 が挿入されなかった場合、入力された値を 2 つのテーブルから削除したいと考えています。

これを行う最善の方法は何ですか?トリガーを使用してそれを行うことはできますか? これを解決するのを手伝ってください。

4

2 に答える 2

3

Uはこれを試すことができます:

SET XACT_ABORT ON
 BEGIN TRY
BEGIN TRAN
INSERT INTO Table1 values ()
INSERT INTO Table2 values ()
INSERT INTO Table3 values ()
COMMIT TRAN
END TRY

BEGIN CATCH 
raiserror('Custome Error Message ',16,20)
END CATCH
SET XACT_ABORT OFF

SET XACT_ABORT ON を使用すると、Transact-SQL ステートメントで実行時エラーが発生した場合、トランザクション全体が終了し、ロールバックされます。

catch ブロックでは、カスタム エラーを発生させるか、テーブルに記録できます。

 Begin CATCH
 Insert into #LogError values (1,'Error while inserting a duplicate value')
 if @@TRANCOUNT >0
 rollback tran 
 END CATCH
于 2012-07-31T06:15:05.397 に答える
1

使用するtransactions

Commit tran -- if success
Rollback tran -- on error

このようなもの

Create Proc YourSPName
AS

BEGIN TRAN

INSERT INTO TableOne ( -- Columns)
VALUES  ( -- Values)

IF (@@ERROR <> 0) goto Truncater;

INSERT INTO TableTwo ( -- Columns)
VALUES  ( -- Values)

IF (@@ERROR <> 0) goto Truncater;

INSERT INTO TableThree ( -- Columns)
VALUES  ( -- Values)

IF (@@ERROR <> 0) goto Truncater;


Truncater:
if(@@ERROR<>0)
begin
    rollback tran
    return -1 -- error flag
end
else
    commit tran   

 GO

詳しくはこちらへ

于 2012-07-31T06:05:32.967 に答える