Activador de auditoría de tabla de SQL Server
Tengo dos mesasCustomers
yAuditTable
. Cuando modifico elCustomers
tabla, necesito insertar un nuevo registro en elAuditTable
:
CREATE TABLE [dbo].[AuditTable]
(
[Id] [int] IDENTITY(1,1) NOT NULL,
[StateBefore] [nvarchar](max) NULL,
[StateAfter] [nvarchar](max) NULL
)
Necesito colocar una representación XML deCustomer
Estado enStateBefore
yStateAfter
, antes y después de la actualización.
losCustomer
tabla es:
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
Encontré la forma de obtener una representación xml de filas:
SELECT
[State] = (SELECT *
FROM dbo.Customer [Customer]
WHERE [Customer].Id = cust.Id
FOR XML AUTO
)
FROM
dbo.Customer cust
Es solo por ejemplo. Entonces, en mi disparador, necesito crear la representación xml de filas desdedeleted
yinserted
mesas.
Aquí está el desencadenante:
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
Entonces, ¿cómo puedo unir dos representaciones dedeleted
yinserted
tablas para insertarlas correctamente en elAuditTable
? Gracias.