2012-01-03 16 views
1

要約テーブルに9個の挿入を持つストアドプロシージャを作成し、最後のステートメントは削除です。ストアドプロシージャ内に明示的なトランザクションを設定する適切な方法

この手順では、指定された日付ごとに実行するのに約9分かかります。エラーが発生し、最初の3つの挿入が実行されると、挿入されたデータが保持されます。これを処理するために、私は試し開始トランザクションを作成しました。私が行ったテストは、SSMSを使用してプロシージャを開始することでした。開始後、コマンドをキャンセルしましたが、トランザクションは保持されました。どうすればこれを避けることができますか?

insert into... 
insert into... 
insert into... 
insert into... 
insert into... 
insert into... 
insert into... 
insert into... 
insert into... 
insert into... 
delete from.... 

おかげ

答えて

0

2つのこと:

1)基本的な構文は次のとおりです。

BEGIN TRY 

    BEGIN TRAN 

    INSERT... 

    DELETE... 

    COMMIT TRAN 

END TRY 
BEGIN CATCH 

    IF (@@TRANCOUNT > 0) 
    BEGIN 
    ROLLBACK TRAN 
    END 

    DECLARE @ErrorMessage NVARCHAR(4000) 
    SET @ErrorMessage = 'Line ' + CONVERT(VARCHAR(20), ERROR_LINE()) + ': ' 
        + ERROR_MESSAGE() 
    RAISERROR(@SQLErrString, 16, 1) 

END CATCH 

2)あなたがプロセスでバッチをキャンセルした場合、手動でROLLBACKのTRANを実行する必要があります。 SELECT @@ TRANCOUNTを実行することでこれを行う必要があるかどうかをテストし、0より大きい場合はROLLBACK TRANを呼び出します。

-1

あなたはあなたが必要なものについてhereStored Procedureと詳細情報を確認できます。

プロシージャの本体は...のようなものは非常に簡単です。