をマージします。デバッグSQLは、私は、次のコードをデバッグしたい
ターゲットテーブルは現時点では空ですので、の部分を実行する必要がありますが、動作しません。また、INSERT
ステートメントが呼び出されていないかどうか、またはこのステートメントにはエラーがあります。
:データベーステーブル内
- 検証した結果
- 優先度の低いPRINTまたはRAISEERROR
- データベースで確認することができないデバッグデータをチェックするための特別なテーブルDevelopmentLog、別々のINSERT文を使用して実行時に読み込みとログを取ることができます。
しかし、何も1だけDELETE
、UPDATE
またはINSERT
文を持っているし、私の知る限りでは、定義されたソース表とターゲット表でのみ動作することができMERGE
条件、内で使用可能ではありません。
私はSQLのデバッグオプションが貧弱であることを知っているが、私はこのクエリでは
あなたは 'MERGE'は、それが挿入する行を持っている場合、それは行を挿入しないバグのいくつかの並べ替えを持っていないこと(可能性の小さなマージン内に)想定することができます。内側の 'SELECT'が返すものを確認してください。あなたが目標条件であなたの目標テーブルとそれをLEFT JOINするなら、それが返すものをチェックしてください。それらはあなたのデバッグ支援です。 'MERGE'は魔法ではありません。特に、 'INSERT'、' UPDATE'、 'DELETE'を単独で実行することはできません。ちょっと単純です(そして時にはときどき)。 –
私の言うことを忘れていましたが、内側のSELECTはうまくいきました。 LEFT JOINトリックは良いヒントです(それはおそらく答えとして入れられる価値があります)、エイリアスの不一致につながりますが、内部SELECTに等しいので問題の原因にはならないようです期待される。 –
@ JeroenMostert - 不必要にペダンティックですが、おそらくINSERT、UPDATE、DELETEを使って実現できないもの - これらの3つのコマンドを組み合わせて実行する単一のアクションが可能ですすべてが評価された後でのみ制約を再検証します。例えば。それらが常に有効であるように、挿入*と*更新を必要とする相互参照の相互キーを持つことができます。 –