-1

一連の更新ステートメントによって入力される単一の派生フィールドがあり、各ステートメントは異なるテーブルと異なるフィールドに結合されます。一連の更新が特定の順序で実行されることが重要です。つまり、テーブル A への結合が結果 X を生成し、テーブル B への結合が結果 Y を生成する場合、結果 Y が必要になります。通常、一連の Update ステートメントを作成するだけです。適切な順序で並べ替え、単一の SSIS SQL コンテナーまたは単一のストアド プロシージャに格納します。これらの更新ステートメント間で GO コマンドまたは BEGIN END を使用するか使用しないかに関するベスト プラクティスはありますか?

4

2 に答える 2

2

連続するステートメントが順不同で実行されるのはなぜだと思いますか? ステートメントのいずれかに特定のロックのヒントがありますか (例: UPDLOCKHOLDLOCKなど)? それ以外の場合、A と B の 2 つの連続するステートメントがあり、A が何かを変更すると、B はその変更を認識します。分岐またはマルチスレッド機能がある場合、SSIS での動作は異なる場合がありますが、これはストアド プロシージャでは不可能です。

またGO、T-SQL コマンドではなく、Management Studio などの特定のクライアント ツールによって認識されるバッチ区切り記号です。GOストアド プロシージャ内の 2 つのステートメントの間に a を配置しようとすると、次の 2 つのいずれかが発生します。

  1. プロシージャはコンパイルに失敗します (オープニングの直前にBEGIN一致するものがない場合)。ENDGO
  2. プロシージャーはコンパイルされますが (ラッパーがない場合BEGIN/END)、思ったよりも短くなり、GO意図した場所ではなく最初の部分で終了します。
于 2013-03-26T16:37:59.360 に答える
0

GOステートメントは、記述した順序で正確に実行されます。BEGIN...END順序付けは必要ありません。そのため、これらのいずれを使用しても効果はありません。また、トランザクションとは何の関係もありません。

于 2013-03-26T16:31:37.687 に答える