web-dev-qa-db-ja.com

SSDT Publishが、ステートメントを実行せずにエラーで失敗する

私の公開の試みはこのエラーで失敗しています

メッセージ205、レベル16、状態1、行7572 UNION、INTERSECT、またはEXCEPT演算子を使用して結合されたすべてのクエリは、ターゲットリストに同数の式が含まれている必要があります。

印刷するための昔ながらのアドバイス 展開スクリプトの実行間のステータスメッセージを取得して、これに絞り込みました。

enter image description here

SQL Serverの癖が原因で行番号が一致しないため、異教徒のようにPRINTする必要があります(上記のリンクを参照)。

文字通り実行されたステートメントがなかったことに注意してください。また、何も実行されなかったことを確認する詳細なトレースを実行しました。

enter image description here

2つのPRINTステートメント間の制御フローステートメントがエラーを引き起こす可能性があるのはなぜですか?!

1
Elaskanator

GOステートメントが成功したコードを残りのコードから分離したことが判明しました。残りのコードには実際にエラーステートメントが含まれているため(エラーメッセージに従って)、構文検証中にエラーがスローされました。

GOステートメントの行番号を取得し、エラーメッセージに示されている行番号(実際にはバッチのオフセット)を追加すると、悪いMERGEステートメントが見つかりました。 SSDT公開結果のエラーメッセージをクリックすると、公開スクリプトのランダムな場所に移動します。

そのため、ステートメントのバッチ処理が原因で、構文検証が最終的にデプロイメントスクリプトで実行されました(SQLプロジェクトでのビルドから除外されています)。

2
Elaskanator