sql >> Database teknologi >  >> RDS >> Sqlserver

SQL-opdatering udløses kun, når kolonnen er ændret

Du har to veje til dit spørgsmål:

1- Brug Update Command i din 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- Brug Join mellem indsat tabel og slettet 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

Når du bruger opdateringskommando til tabel SCHEDULE og Indstil QtyToRepair Kolonne til ny værdi, hvis ny værdi er lig med gammel værdi i én eller flere rækker, opdaterer løsning 1 alle opdaterede rækker i skematabellen, men løsning 2 opdaterer kun planlæg rækker, hvor den gamle værdi ikke er lig med den nye værdi.



  1. Hvordan kan jeg komme uden om MySQL Errcode 13 med SELECT INTO OUTFILE?

  2. Django-forbindelse til postgres af docker-compose

  3. Introduktion til PL/SQL-pakker i Oracle-databasen

  4. 4 måder at formatere et tal uden decimaler i Oracle