Primeiro vamos criar uma tabela para salvar os logs. Podemos utilizar a SQL abaixo:
USE [minhaBaseDeDados]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[logusuario](
[codigo] [int] IDENTITY(1,1) NOT NULL,
[codusuario] [varchar](20) NOT NULL,
[nome] [varchar](50) NOT NULL,
[alterado_por] [varchar](20) NOT NULL,
[alterado_em] [datetime] NOT NULL,
CONSTRAINT [PK_logusuario] PRIMARY KEY CLUSTERED
(
[codigo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
Com esse comando SQL, criaremos a tabela logusuario com as colunas: codigo, codusuario, nome, alterado_por e alterado_em.
Agora iremos criar a Trigger.
USE [minhaBaseDeDados]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[LOGGUSUARIO] ON [dbo].[GUSUARIO] FOR update AS
BEGIN
DECLARE @codusuario varchar(30);
select @codusuario = INSERTED.CODUSUARIO from inserted;
IF UPDATE(senha)
BEGIN
INSERT
INTO
logusuario
(
codusuario,
nome,
alterado_por,
alterado_em
)
(
SELECT
top 1
GUSUARIO.CODUSUARIO,
GUSUARIO.NOME,
GUSUARIO.RECMODIFIEDBY,
GUSUARIO.RECMODIFIEDON
FROM
dbo.GUSUARIO
WHERE
GUSUARIO.CODUSUARIO = @codusuario
)
END
END
Essa trigger será criada na tabela GUSUARIO que no meu caso é onde estão salvos os usuários. Ela será executada quando for executado uma alteração em algum cadastro de usuário. A linha onde está escrito "FOR update" indica que uma ação será executada quando for feito um update na tabela.
Quando a ação é um update, o banco de dados faz um delete e depois um insert. Por isso na trigger teremos a tupla DELETED e INSERTED.
A linha "select @codusuario = INSERTED.CODUSUARIO from inserted;", armazena na variável @codusuario, o código do usuário que está sendo alterado.
Na próxima linha temos um IF que verifica se o campo senha está sendo alterado e faz o insert se o usuário está alterando a senha.
O insert feito está utilizando um select. No meu caso o sistema salva o último usuário que alterou a linha no campo RECMODIFIEDBY e salva a data da última modificação em RECMODIFIEDON. Assim em próximas alterações teremos todos os usuários que alteraram senha na outra tabela, a logusuario.
É isso. Até mais.
Nenhum comentário:
Postar um comentário