Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wyzwalacz aktualizacji SQL tylko wtedy, gdy kolumna jest modyfikowana

Masz dwie możliwości odpowiedzi na swoje pytanie:

1- Użyj polecenia aktualizacji w wyzwalaczu.

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- Użyj opcji Połącz między wstawioną i usuniętą 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

Gdy używasz polecenia aktualizacji dla tabeli SCHEDULE i ustaw QtyToRepair Kolumna do nowej wartości, jeśli nowa wartość jest równa starej wartości w jednym lub wielu wierszach, rozwiązanie 1 aktualizuje wszystkie zaktualizowane wiersze w tabeli harmonogramu, ale rozwiązanie 2 aktualizuje tylko te wiersze harmonogramu, których stara wartość nie jest równa nowej wartości.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja a procedura składowana w SQL Server

  2. Jak wysłać wyniki zapytania e-mailem jako załącznik w SQL Server (T-SQL)

  3. Walidacja e-mail TSQL (bez wyrażenia regularnego)

  4. Agreguj LUB bitowe w podzapytaniu

  5. SQL Server:czy powinienem używać tabel information_schema zamiast tabel sys?