Criar tabela com RECCREATEDBY e RECMODIFIEDBY no SQLSERVER
- Amanda Nascimento

- 3 de nov. de 2023
- 2 min de leitura
Atualizado: 7 de ago.
Registrar quem criou ou modificou um registro (e quando isso ocorreu) é essencial para rastreabilidade e auditoria em sistemas. Nas tabelas, campos como RecCreatedBy, RecModifiedBy e suas respectivas datas (RecCreatedDate, RecModifiedDate) permitem monitorar mudanças feitas por usuários ou processos.
💠 Para criar uma tabela

CREATE TABLE funcionarios (
ID INT IDENTITY(1,1) PRIMARY KEY,
nome VARCHAR(50),
idade INT,
RecCreatedBy VARCHAR(50),
RecModifiedBy VARCHAR(50),
RecCreatedDate DATETIME DEFAULT GETDATE(),
RecModifiedDate DATETIME
);
RecCreatedBy e RecModifiedBy: armazenam o nome do usuário (obtido via SUSER_SNAME()).
RecCreatedDate: definida automaticamente como a data/hora da criação via GETDATE().
RecModifiedDate: será atualizada via trigger.
💠 Para criar regra com Trigger para Atualização Automática

Usamos uma trigger para automatizar a atualização dos campos quando um registro é modificado:
CREATE TRIGGER tr_funcionarios_update
ON funcionarios
AFTER UPDATE
AS
BEGIN
UPDATE f
SET
RecModifiedBy = SUSER_SNAME(),
RecModifiedDate = GETDATE()
FROM funcionarios f
END;
GO
O AFTER UPDATE garante que toda alteração dispare a atualização automática dos campos de auditoria.
A função inserted contém os valores novos que foram atualizados.
💠Exemplo de uso inserindo dados:
INSERT INTO funcionarios (nome, idade, RecCreatedBy, RecModifiedBy)
VALUES
('Amanda', 26, SUSER_SNAME(), NULL),
('Pedro', 14, SUSER_SNAME(), NULL),
('Vitor', 13, SUSER_SNAME(), NULL);

💠Exemplo de uso alterando dados:

UPDATE funcionarios
SET idade = 24
WHERE nome = 'Pedro';
-- Trigger encarrega-se de ajustar RecModifiedBy e RecModifiedDate

💠Boas práticas
Separar lógica de auditoria: modularize o código, criando funções ou procedimentos para manter organização.
Padrão de usuário: prefira ORIGINAL_LOGIN() ou SUSER_SNAME() para precisão, especialmente em cenários com impersonation.
Use SYSUTCDATETIME() para capturar data/hora UTC e evitar ambiguidades de fuso horário.
Validação de dados via constraints: se você não quiser permitir valores nulos em RecModifiedBy/RecModifiedDate, utilize NOT NULL ou triggers que garantam preenchimento.
Espelho para auditoria completa: crie uma tabela de histórico (log_funcionarios) armazenando todos os estados anteriores para análise futura ou trobleshooting.
Considerar CREATE OR ALTER TRIGGER: facilita atualizações do código sem precisar dropar a trigger antes.


