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

wyzwalacz aktualizacji do aktualizacji rekordów w innej tabeli

Potrzebujesz czegoś takiego - opartego na zestawie rozwiązanie, które uwzględnia to w UPDATE oświadczenie, być może aktualizujesz wiele wierszy na raz, dlatego wyzwalacz musi również radzić sobie z wieloma wierszami w Inserted i Deleted tabele.

CREATE TRIGGER [dbo].[updateUserId] 
ON [dbo].[User_TB]
FOR UPDATE
AS 
    -- update the "Break" table - find the rows based on the *old* User_Id
    -- from the "Deleted" pseudo table, and set it to the *new* User_Id
    -- from the "Inserted" pseudo table
    SET User_Id = i.User_Id 
    FROM Inserted i
    INNER JOIN Deleted d ON i.TID = d.TID
    WHERE
        Break_TB.User_Id = d.User_Id

    -- update the "Log" table - find the rows based on the *old* User_Id
    -- from the "Deleted" pseudo table, and set it to the *new* User_Id
    -- from the "Inserted" pseudo table
    UPDATE Break_TB 
    SET User_Id = i.User_Id 
    FROM Inserted i
    INNER JOIN Deleted d ON i.TID = d.TID
    WHERE
        Break_TB.User_Id = d.User_Id

Ten kod zakłada że TID kolumna w User_TB tabela jest kluczem podstawowym który pozostaje taki sam podczas aktualizacji (abym mógł połączyć "stare" wartości z Deleted pseudotabela z "nowymi" wartościami po aktualizacji, przechowywana w Inserted pseudotabela)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DB_NAME() vs ORIGINAL_DB_NAME() w SQL Server:jaka jest różnica?

  2. Jak przestawić wiele kolumn bez agregacji

  3. Index znajdował się poza granicami Array. (Microsoft.SqlServer.smo)

  4. Tworzenie indeksu na zmiennej tabeli

  5. Kompresuj określoną partycję w tabeli w SQL Server (T-SQL)