Nella creazione di una pista di controllo non ho problemi a rintracciare chi sta aggiornando o inserendo i record in una tabella, tuttavia, il tracciamento di chi elimina i record sembra più problematico.
Sono in grado di tenere traccia degli inserti / aggiornamenti includendo nel campo Inserisci / Aggiorna il campo "Aggiornato". Ciò consente al trigger INSERT / UPDATE di accedere al campo "UpdatedBy" tramite inserted.UpdatedBy
. Tuttavia, con il trigger Elimina non vengono inseriti / aggiornati dati. C'è un modo per passare informazioni sul trigger Elimina in modo che possa sapere chi ha eliminato il record?
Ecco un trigger Inserisci / Aggiorna
ALTER TRIGGER [dbo].[trg_MyTable_InsertUpdate]
ON [dbo].[MyTable]
FOR INSERT, UPDATE
AS
INSERT INTO AuditTable (IdOfRecordedAffected, UserWhoMadeChanges)
VALUES (inserted.ID, inserted.LastUpdatedBy)
FROM inserted
Utilizzando SQL Server 2012
SUSER_SNAME()
funzionerebbe in una situazione come un'applicazione Web in cui un singolo utente potrebbe essere utilizzato per la comunicazione di database per l'intera applicazione.
SUSER_SNAME()
è la chiave per ottenere chi ha eliminato il record.