マージ機能を使用してレコードを挿入、更新、および削除するかなり標準的なスクリプトがあります。しかし、削除された結果を監査タイプのテーブルに出力するのに多くの問題があります。クリーンなターゲットテーブルに対してプロシージャを実行すると、何も削除されていないにもかかわらず、監査テーブルにすべてnullが含まれることになります(この時点では、非監査テーブルに挿入されるだけです。これは当然のことです)。同じ条件で、同じクリーンなターゲットテーブルに対して、次のものを削除すると、次のようになります。
OUTPUT deleted.Column1, deleted.Column2 INTO Table_Audit (Column1, Column2)
次のように置き換えます。
OUTPUT $action, Inserted.*, Deleted.*
実際には何も削除されていないことがわかります。これは、ソーステーブルとターゲットテーブルが両方の実行で同じであり、マージ述語が同じままであることを考えると奇妙です。2番目のステートメントのアクション列のすべてのレコードは、予想どおりに挿入されています。文字通り唯一違うのは、私が上で述べたことです。何が起こっているのかについてのアイデアはありますか?