sql >> Databasteknik >  >> RDS >> Sqlserver

SQL-uppdatering trigger endast när kolumnen ändras

Du har två sätt för din fråga:

1- Använd Uppdatera kommando i din utlösare.

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- Använd Join mellan Infogad tabell och borttagen tabell

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 använder uppdateringskommandot för tabellen SCHEDULE och ställ in QtyToRepair Kolumn till nytt värde, om nytt värde är lika med gammalt värde i en eller flera rader, uppdaterar lösning 1 alla uppdaterade rader i schematabellen, men lösning 2 uppdaterar bara schemalägga rader där det gamla värdet inte är lika med det nya värdet.



  1. Ta bort dubbletter av rader från en tabell

  2. Rätt verktyg gör att trimningen fungerar snabbt

  3. MySQL returnerar endast en rad

  4. Kontrollera om det finns ett värde i Postgres-arrayen