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

Wyzwalanie wstawia stare wartości - wartości, które zostały zaktualizowane

W wyzwalaczu dostępne są dwie pseudotabele, Inserted i Deleted , które zawierają te wartości.

W przypadku UPDATE, Deleted tabela będzie zawierać stare wartości, podczas gdy Inserted tabela zawiera nowe wartości.

Więc jeśli chcesz rejestrować ID, OldValue, NewValue w wyzwalaczu musisz napisać coś takiego:

CREATE TRIGGER trgEmployeeUpdate
ON dbo.Employees AFTER UPDATE
AS 
   INSERT INTO dbo.LogTable(ID, OldValue, NewValue)
      SELECT i.ID, d.Name, i.Name
      FROM Inserted i
      INNER JOIN Deleted d ON i.ID = d.ID

Zasadniczo dołączasz do Inserted i Deleted pseudo-tabele, weź identyfikator (który jest taki sam, jak przypuszczam w obu przypadkach), starą wartość z Deleted tabela, nowa wartość z Inserted i przechowujesz wszystko w LogTable



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstawić wiele wierszy BEZ powtarzania części instrukcji INSERT INTO ...?

  2. Jaka jest różnica między liczbą zmiennoprzecinkową a liczbową/dziesiętną w SQL Server — samouczek SQL Server / T-SQL, część 33

  3. błąd nie znaleziono klucza przetwarzania wymiaru ssas

  4. Wywoływanie niezarządzanych funkcji C/C++ DLL z SQL Server 2008

  5. Mapowanie punktów geoprzestrzennych w płynnym NHibernate