SQL Server-Tabellenprüfauslöser

Ich habe zwei TischeCustomers undAuditTable. Wenn ich das @ ändeCustomers table, ich muss einen neuen Datensatz in das @ einfügAuditTable:

CREATE TABLE [dbo].[AuditTable]
(
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [StateBefore] [nvarchar](max) NULL,
    [StateAfter] [nvarchar](max) NULL
) 

Ich muss eine XML-Darstellung von @ platzierCustomer state intoStateBefore undStateAfter, vor und nach dem Update.

DasCustomer table ist:

CREATE TABLE [dbo].[Customer]
(
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](256) NOT NULL,
    [Email] [nvarchar](max) NOT NULL,
    [IsDeleted] [bit] NULL,
    [CreatedUtc] [datetime] NOT NULL,
    [UpdatedUtc] [datetime] NULL,
    [Version] [timestamp] NOT NULL,

    CONSTRAINT [PK_dbo.Customer] 
        PRIMARY KEY CLUSTERED ([Id] ASC)
           WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                 IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,  
                 ALLOW_PAGE_LOCKS = ON)
)
GO

ALTER TABLE [dbo].[Customer] 
   ADD DEFAULT (getutcdate()) FOR [CreatedUtc]
GO

Ich habe herausgefunden, wie man eine XML-Darstellung von Zeilen erhält:

SELECT
    [State] = (SELECT *
               FROM dbo.Customer [Customer]
               WHERE [Customer].Id = cust.Id
               FOR XML AUTO
              )
FROM 
    dbo.Customer cust

It nur zum Beispiel. Also muss ich in meinem Trigger die XML-Darstellung von Zeilen aus @ erstelldeleted undinserted tables.

Hier ist der Auslöser:

ALTER TRIGGER [dbo].[UpdateCustomerTrigger]
ON [dbo].[Customer]
FOR UPDATE
AS 
BEGIN
    UPDATE Customer 
    SET UpdatedUtc = GETDATE()
    FROM INSERTED
    WHERE inserted.id = Customer.Id

    -- here I need to insert new records into AuditTable
END

So, wie kann ich zwei Darstellungen von @ verbindedeleted undinserted Tabellen, um sie korrekt in das @ einzufügAuditTable? Vielen Dank

Antworten auf die Frage(4)

Ihre Antwort auf die Frage