sql >> Database >  >> RDS >> Sqlserver

SQL-updatetrigger alleen wanneer kolom is gewijzigd

U kunt uw vraag op twee manieren beantwoorden:

1- Gebruik het update-commando in uw trigger.

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- Gebruik Join tussen ingevoegde tabel en verwijderde tabel

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

Wanneer u de update-opdracht gebruikt voor tabel SCHEDULE en stel QtyToRepair in Kolom naar nieuwe waarde, als nieuwe waarde gelijk is aan oude waarde in één of meerdere rijen, update 1 update alle bijgewerkte rijen in Schedule-tabel, maar oplossing 2 werkt alleen planningsrijen bij waarvan de oude waarde niet gelijk is aan de nieuwe waarde.



  1. Een databaseproxy kiezen voor MySQL en MariaDB

  2. MAX() vs GREATEST() in MySQL:wat is het verschil?

  3. Oracle JDeveloper gebruiken met MySQL Database Service op Oracle Cloud Platform, deel 2

  4. Hoe het percentage van twee kolommen in MySQL te berekenen