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

列が変更された場合にのみSQL更新トリガー

    質問には2つの方法があります:

    1-トリガーで更新コマンドを使用します。

    ALTER TRIGGER [dbo].[tr_SCHEDULE_Modified]
       ON [dbo].[SCHEDULE]
       AFTER UPDATE
    AS BEGIN
        SET NOCOUNT ON;
        IF UPDATE (QtyToRepair) 
        BEGIN
            UPDATE SCHEDULE 
            SET modified = GETDATE()
               , ModifiedUser = SUSER_NAME()
               , ModifiedHost = HOST_NAME()
            FROM SCHEDULE S INNER JOIN Inserted I 
            ON S.OrderNo = I.OrderNo and S.PartNumber = I.PartNumber
            WHERE S.QtyToRepair <> I.QtyToRepair
        END 
    END
    

    2-挿入されたテーブルと削除されたテーブルの間の結合を使用する

    ALTER TRIGGER [dbo].[tr_SCHEDULE_Modified]
       ON [dbo].[SCHEDULE]
       AFTER UPDATE
    AS BEGIN
        SET NOCOUNT ON;    
    
        UPDATE SCHEDULE 
        SET modified = GETDATE()
           , ModifiedUser = SUSER_NAME()
           , ModifiedHost = HOST_NAME()
        FROM SCHEDULE S 
        INNER JOIN Inserted I ON S.OrderNo = I.OrderNo and S.PartNumber = I.PartNumber
        INNER JOIN Deleted D ON S.OrderNo = D.OrderNo and S.PartNumber = D.PartNumber                  
        WHERE S.QtyToRepair <> I.QtyToRepair
        AND D.QtyToRepair <> I.QtyToRepair
    END
    

    テーブルSCHEDULEの更新コマンドを使用する場合 QtyToRepairを設定します 列を新しい値に変更します。新しい値が1行または複数行の古い値と等しい場合、ソリューション1はスケジュールテーブルの更新されたすべての行を更新しますが、ソリューション2は古い値が新しい値と等しくないスケジュール行のみを更新します。



    1. Oracleで2つのタイムスタンプの差を計算する方法

    2. 行からコンマ区切りの文字列を取得します

    3. クエリ実行時間のpsycopg2ログを取得するにはどうすればよいですか?

    4. Oracleデータベースで日付形式を変更する方法