3

マージ機能を使用してレコードを挿入、更新、および削除するかなり標準的なスクリプトがあります。しかし、削除された結果を監査タイプのテーブルに出力するのに多くの問題があります。クリーンなターゲットテーブルに対してプロシージャを実行すると、何も削除されていないにもかかわらず、監査テーブルにすべてnullが含まれることになります(この時点では、非監査テーブルに挿入されるだけです。これは当然のことです)。同じ条件で、同じクリーンなターゲットテーブルに対して、次のものを削除すると、次のようになります。

OUTPUT deleted.Column1, deleted.Column2 INTO Table_Audit (Column1, Column2)

次のように置き換えます。

OUTPUT $action, Inserted.*, Deleted.*

実際には何も削除されていないことがわかります。これは、ソーステーブルとターゲットテーブルが両方の実行で同じであり、マージ述語が同じままであることを考えると奇妙です。2番目のステートメントのアクション列のすべてのレコードは、予想どおりに挿入されています。文字通り唯一違うのは、私が上で述べたことです。何が起こっているのかについてのアイデアはありますか?

4

1 に答える 1

3

例Kを見てください。

マージステートメントをサブクエリに入れて、監査テーブルに対する挿入ステートメントを作成します。列の1つがであるかどうかを確認し$action、値をフィルタリングして外側のwhere句に挿入し、削除された行のみを挿入します。

于 2012-09-26T19:51:03.007 に答える