一連の更新ステートメントによって入力される単一の派生フィールドがあり、各ステートメントは異なるテーブルと異なるフィールドに結合されます。一連の更新が特定の順序で実行されることが重要です。つまり、テーブル A への結合が結果 X を生成し、テーブル B への結合が結果 Y を生成する場合、結果 Y が必要になります。通常、一連の Update ステートメントを作成するだけです。適切な順序で並べ替え、単一の SSIS SQL コンテナーまたは単一のストアド プロシージャに格納します。これらの更新ステートメント間で GO コマンドまたは BEGIN END を使用するか使用しないかに関するベスト プラクティスはありますか?
質問する
772 次
2 に答える
2
連続するステートメントが順不同で実行されるのはなぜだと思いますか? ステートメントのいずれかに特定のロックのヒントがありますか (例: UPDLOCK
、HOLDLOCK
など)? それ以外の場合、A と B の 2 つの連続するステートメントがあり、A が何かを変更すると、B はその変更を認識します。分岐またはマルチスレッド機能がある場合、SSIS での動作は異なる場合がありますが、これはストアド プロシージャでは不可能です。
またGO
、T-SQL コマンドではなく、Management Studio などの特定のクライアント ツールによって認識されるバッチ区切り記号です。GO
ストアド プロシージャ内の 2 つのステートメントの間に a を配置しようとすると、次の 2 つのいずれかが発生します。
- プロシージャはコンパイルに失敗します (オープニングの直前に
BEGIN
一致するものがない場合)。END
GO
- プロシージャーはコンパイルされますが (ラッパーがない場合
BEGIN/END
)、思ったよりも短くなり、GO
意図した場所ではなく最初の部分で終了します。
于 2013-03-26T16:37:59.360 に答える
0
GO
ステートメントは、記述した順序で正確に実行されます。BEGIN...END
順序付けは必要ありません。そのため、これらのいずれを使用しても効果はありません。また、トランザクションとは何の関係もありません。
于 2013-03-26T16:31:37.687 に答える