Usuário com melhor resposta
Trigger - Delete

Pergunta
-
Bom dia gente....
Estou com um problema....utilizo SQL 2000 e tenho tido problemas com dados que somem de uma determinada tabela do meu BD....
Como faço para criar uma trigger que me verifique tudo que foi deletado dentro dessa determinada tabela e me mostre esses dados??
Grato..
Respostas
-
-
Olá Edgar,
Há vários trechos do seu código que estão erradas (FROM duas vezes, colunas do meu exemplo, misturado com o seu exemplo, etc). Tente o seguinte:
Code Snippet-- Cria a tabela
create
table tbl (usid int, saldo float, data datetime)go
-- Cria a tabela para guardar os deletados
create
table tbldeletados (usid int, saldo float, data datetime,dta
smalldatetime default getdate())go
-- Cria a trigger
create
trigger trg on tblfor
deleteas
begin
insert
into tbldeletados (usid, saldo, data) select usid, saldo, data from deletedend
-------------------------------------------------------------------------
-- insere registros
insert
into tbl (usid, saldo, data) values (1, 20.0, '20081013')-- exclui registros
delete
from tbl-- verifica registros excluídos
select
usid, saldo, data from tbldeletados[ ]s,
Gustavo
-
Ola ..
Creio que este controle deve ser feito dentro da aplicação, pois se você especificar um User e Senha na string de conexão com o banco de dados irá ser o mesmo.
Code Snippet-- Irá retornar o nome dominio e o nome do usuário (Dominio\User)
SELECT SYSTEM_USER
-- Irá pegar o nome do host no qual esta sendo executado.
SELECT HOST_NAME()
Abraços.
-
Edgar ..
Segue o script abaixo que cria exatamente o que você deseja fazer
Code Snippet-- CRIA A TABELA NORMAL
CREATE TABLE TBL (
USID INT,
SALDO NUMERIC(15,2),
DATA DATETIME,
USUARIO VARCHAR(50),
MAQUINA VARCHAR(50))
-- CRIA A TABELA DE DELETADOS
CREATE TABLE TBLDELETADOS(
USID INT,
SALDO NUMERIC(15,2),
DATA DATETIME,
USUARIO VARCHAR(50) DEFAULT SYSTEM_USER,
MAQUINA VARCHAR(50) DEFAULT HOST_NAME(),
DTA SMALLDATETIME DEFAULT GETDATE())GO
-- DROP TABLE TBLDELETADOS
CREATE TRIGGER TRG ON TBL
FOR DELETE
AS
BEGIN
INSERT INTO TBLDELETADOS (USID, SALDO, DATA)
SELECT USID, SALDO, DATA
FROM DELETED
END
Todas as Respostas
-
Bom Dia,
Segue um exemplo.
Code Snippet-- Cria a tabela
create
table tbl (id int, nome varchar(50))go
-- Cria a tabela para guardar os deletados
create
table tbldeletados (id int, nome varchar(50),data
smalldatetime default getdate())go
-- Cria a trigger
create
trigger trg on tblfor
deleteas
begin
insert
into tbldeletados (id, nome) select id, nome from deletedend
-- insere registros
insert
into tbl values (1, 'Nome 1')-- exclui registros
delete
from tbl-- verifica registros excluídos
select
id, nome, data from tbldeletados[ ]s,
Gustavo
-
Bom dia Gustavo...
Estou tentando alterar sua trigger para o seguinte parametro e não consigo finalizar...
-- Cria a tabela
create
table tbl (usid int, saldo float, data datetime)go
-- Cria a tabela para guardar os deletados
create
table tbldeletados (usid int, saldo float, data datetime,dta
smalldatetime default getdate())go
-- Cria a trigger
create
trigger trg on tblfor
deleteas
begin
insert
into tbldeletados (usid, saldo, data, dta) select usid, saldo, data, dta from deleted from deletedend
-------------------------------------------------------------------------
-- insere registros
insert
into tbl values (1, 'Nome 1')-- exclui registros
delete
from tbl-- verifica registros excluídos
select
id, nome, data from tbldeletadosNão consigo alterar a parte de insere registros para baixo, de modo que contemple os dados que coloquei acima no código...como procedo?
-
-
Olá Edgar,
Há vários trechos do seu código que estão erradas (FROM duas vezes, colunas do meu exemplo, misturado com o seu exemplo, etc). Tente o seguinte:
Code Snippet-- Cria a tabela
create
table tbl (usid int, saldo float, data datetime)go
-- Cria a tabela para guardar os deletados
create
table tbldeletados (usid int, saldo float, data datetime,dta
smalldatetime default getdate())go
-- Cria a trigger
create
trigger trg on tblfor
deleteas
begin
insert
into tbldeletados (usid, saldo, data) select usid, saldo, data from deletedend
-------------------------------------------------------------------------
-- insere registros
insert
into tbl (usid, saldo, data) values (1, 20.0, '20081013')-- exclui registros
delete
from tbl-- verifica registros excluídos
select
usid, saldo, data from tbldeletados[ ]s,
Gustavo
-
-
-
Ola ..
Creio que este controle deve ser feito dentro da aplicação, pois se você especificar um User e Senha na string de conexão com o banco de dados irá ser o mesmo.
Code Snippet-- Irá retornar o nome dominio e o nome do usuário (Dominio\User)
SELECT SYSTEM_USER
-- Irá pegar o nome do host no qual esta sendo executado.
SELECT HOST_NAME()
Abraços.
-
-
onde estou errando???
-- Cria a tabela
create table tbl (usid int, saldo float, data DATETIME, usuario VARCHAR(50), maquina VARCHAR(50))
go
-- Cria a tabela para guardar os deletadoscreate table tbldeletados (usid int, saldo float, data datetime, usuario VARCHAR DEFAULT SELECT SYSTEM_USER(), maquina VARCHAR DEFAULT SELECT HOST_NAME(), dta smalldatetime default getdate())
go
-- Cria a triggercreate trigger trg on tbl
for delete
as
begin
insert into tbldeletados (usid, saldo, data, usuario, maquina, dta) select usid, saldo, data, usuario, maquina, dta from deleted
end
-- verifica registros excluídosselect usid, saldo, data, usuario, maquina, dta from tbldeletados
-
Edgar ..
Segue o script abaixo que cria exatamente o que você deseja fazer
Code Snippet-- CRIA A TABELA NORMAL
CREATE TABLE TBL (
USID INT,
SALDO NUMERIC(15,2),
DATA DATETIME,
USUARIO VARCHAR(50),
MAQUINA VARCHAR(50))
-- CRIA A TABELA DE DELETADOS
CREATE TABLE TBLDELETADOS(
USID INT,
SALDO NUMERIC(15,2),
DATA DATETIME,
USUARIO VARCHAR(50) DEFAULT SYSTEM_USER,
MAQUINA VARCHAR(50) DEFAULT HOST_NAME(),
DTA SMALLDATETIME DEFAULT GETDATE())GO
-- DROP TABLE TBLDELETADOS
CREATE TRIGGER TRG ON TBL
FOR DELETE
AS
BEGIN
INSERT INTO TBLDELETADOS (USID, SALDO, DATA)
SELECT USID, SALDO, DATA
FROM DELETED
END -
Grato Rafael.....entendi o que eu estava fazendo de errado.....no final meu código ficou assim....
CREATE TABLE TBLDELETADOS( USID INT, SALDO NUMERIC(15,2), DATA DATETIME, USUARIO VARCHAR(50) DEFAULT SYSTEM_USER, MAQUINA VARCHAR(50) DEFAULT HOST_NAME(), DTA SMALLDATETIME DEFAULT GETDATE())
GOCREATE TRIGGER TRG ON cartaosaldo
FOR DELETE
AS
BEGIN
INSERT INTO TBLDELETADOS (USID, SALDO, DATA)
SELECT USID, SALDO, DATA
FROM DELETED
ENDSELECT * FROM CartaoSaldo
DELETE CartaoSaldo
SELECT * FROM tbldeletados
onde o resultado exibido foi:
USID SALDO DATA USUARIO MAQUINA DATA DELETE
1 .00 2008-10-14 10:32:33.000 HPXP\Edgar HPXP 2008-10-14 14:29:00
-
-
Edgar,
Você tem a opção de criar a trigger da seguinte maneira caso queira ela como Delete e Update.
Existem varias maneiras diferentes que pode ser criada a trigger.
Code SnippetCREATE TRIGGER TRG ON TBL
FOR DELETE, UPDATEou
CREATE TRIGGER TRG ON TBL
FOR DELETE, UPDATE, INSERTAbraços
-
Entendi...então minha triger final ficaria assim....
CREATE TABLE TBLDELETADOS( USID INT, SALDO NUMERIC(15,2), DATA DATETIME, USUARIO VARCHAR(50) DEFAULT SYSTEM_USER, MAQUINA VARCHAR(50) DEFAULT HOST_NAME(), DTA SMALLDATETIME DEFAULT GETDATE())
GOCREATE TRIGGER TRG ON cartaosaldo
FOR DELETE, UPDATE, INSERT
AS
BEGIN
INSERT INTO TBLDELETADOS (USID, SALDO, DATA)
SELECT USID, SALDO, DATA
FROM DELETED AND INSERTED AND UPDATED
END