sql >> データベース >  >> RDS >> Sqlserver

MSSQLServerで列の変更を検出するための最も効率的な方法

    まず、トリガーでストアドプロシージャを呼び出さないことから始めましょう。複数行の挿入を説明するには、procをカーソルで移動する必要があります。これは、セットベースのクエリ(たとえば、すべての価格を10%更新する)でロードした200,000行は、トリガーがロードを処理しようと勇敢に試みるため、テーブルを何時間もロックする可能性があることを意味します。さらに、procで何かが変更された場合、テーブルへの挿入を完全に壊したり、テーブルを完全にハングアップさせたりする可能性があります。私は、トリガーコードがトリガー以外の何も呼び出さないことを固く信じています。

    個人的には、単に自分の仕事をすることを好みます。トリガーで適切に実行したいアクションを記述した場合、列が変更された場所でのみ更新、削除、または挿入されます。

    例:パフォーマンス上の理由で非正規化が行われたために、2つの場所に格納しているlast_nameフィールドを更新するとします。

    update t
    set lname = i.lname
    from table2 t 
    join inserted i on t.fkfield = i.pkfield
    where t.lname <>i.lname
    

    ご覧のとおり、現在更新しているテーブルにあるものとは異なるlnameのみが更新されます。

    監査を実行し、変更された行のみを記録する場合は、i.field1<>d.field1またはi.field2<>d.field3(すべてのフィールドなど)

    のようなすべてのフィールドを使用して比較を行います。

    1. Hibernateが2つのテーブルに参加し、春の安らかなWebサービスでjson応答を生成しますか?

    2. 大きなクエリ結果からのランダムな行

    3. MySQLサーバーでPHPを使用してループしている間

    4. クライアント側(express / node.js)でPostgreSQL(pg)を使用できますか?