幸いなことに、SQL Server のトランザクションは複数のバッチにまたがることができます (各 exec
別のバッチとして扱われます。)
EXEC
をラップできます BEGIN TRANSACTION
のステートメント そして COMMIT
ただし、エラーが発生した場合は、さらに一歩進んでロールバックする必要があります。
理想的には、次のようなものが必要です:
BEGIN TRY BEGIN TRANSACTION exec( @sqlHeader) exec(@sqlTotals) exec(@sqlLine) COMMIT END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK END CATCH
プレ>
BEGIN TRANSACTION
そしてCOMMIT
私はあなたがすでに精通していると信じています。BEGIN TRY
そしてBEGIN CATCH
ブロックは基本的に、発生したエラーをキャッチして処理するために存在します。EXEC
のいずれかが ステートメントでエラーが発生すると、コードの実行はCATCH
にジャンプします ブロック。トランザクションをできるだけ短くしたいので、既存の SQL 構築コードはトランザクション (上記) の外にある必要があります。