sql >> Databasteknik >  >> RDS >> Sqlserver

Jämför raderade och infogade tabeller i SQL Server 2008

Jag är inte helt säker på vad ditt mål är, jag tror att det kan vara något sånt här. Låt oss säga att vi har en sådan här tabell:

CREATE TABLE Product
(
     ID      INT                   PRIMARY KEY,
     Name    NVARCHAR(100)         NOT NULL,
     Price   DECIMAL(10,2)         NOT NULL
);

och någon granskningstabell som denna:

CREATE TABLE ProductAudit
(
     AuditID      INT                   IDENTITY PRIMARY KEY, 
     ProductID    INT                   NOT NULL
     OldName      NVARCHAR(100)         NULL,
     OldPrice     DECIMAL(10,2)         NULL,
     NewName      NVARCHAR(100)         NULL,
     NewPrice     DECIMAL(10,2)         NULL
);

Sedan skapar du en trigger:

CREATE TRIGGER TR_AUDIT
ON Product
FOR INSERT, UPDATE, DELETE
AS
BEGIN
       INSERT INTO ProductAudit (ProductID, OldName, OldPrice, NewName, NewPrice)
       SELECT 
           COALESCE(I.ID, D.ID),
           D.Name,
           D.Price,
           I.Name,
           I.Price
       FROM 
           INSERTED I FULL OUTER JOIN DELETED D ON I.ID = D.ID;
END
GO

Där har du det.



  1. Hitta lediga platser i ett bokningssystem

  2. PostgreSQL på väg upp:2018 Postgres fynd och 2019 trender

  3. välj nivå från dual connect by level<=4 hur det fungerar internt

  4. Behöver infoga 100 000 rader i mysql med viloläge på under 5 sekunder