幸いなことに、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 構築コードはトランザクション (上記) の外にある必要があります。