none
Trigger - Delete RRS feed

  • 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..

    segunda-feira, 13 de outubro de 2008 12:54

Respostas

  • Bom dia,

     

    Apenas uma observação em seu código acima, no 1° insert você colocou um parametro no qual definiu ele como Default ou seja não precisa informar o campo DTA no insert.

     

    Abraços

     

    segunda-feira, 13 de outubro de 2008 14:30
  • 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 tbl

    for delete

    as

    begin

    insert into tbldeletados (usid, saldo, data) select usid, saldo, data from deleted

    end

     

    -------------------------------------------------------------------------

    -- 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

    segunda-feira, 13 de outubro de 2008 14:30
  • 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.

    segunda-feira, 13 de outubro de 2008 17:27
  •  

    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

     

     

    Abraços
    terça-feira, 14 de outubro de 2008 16:53

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 tbl

    for delete

    as

    begin

    insert into tbldeletados (id, nome) select id, nome from deleted

    end

     

    -- 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

    segunda-feira, 13 de outubro de 2008 13:10
  • 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 tbl

    for delete

    as

    begin

    insert into tbldeletados (usid, saldo, data, dta) select usid, saldo, data, dta from deleted from deleted

    end

    -------------------------------------------------------------------------

    -- insere registros

    insert into tbl values (1, 'Nome 1')

     

    -- exclui registros

    delete from tbl

     

    -- verifica registros excluídos

    select id, nome, data from tbldeletados

     

     

    Não consigo alterar a parte de insere registros para baixo, de modo que contemple os dados que coloquei acima no código...como procedo?

    segunda-feira, 13 de outubro de 2008 14:04
  • Bom dia,

     

    Apenas uma observação em seu código acima, no 1° insert você colocou um parametro no qual definiu ele como Default ou seja não precisa informar o campo DTA no insert.

     

    Abraços

     

    segunda-feira, 13 de outubro de 2008 14:30
  • 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 tbl

    for delete

    as

    begin

    insert into tbldeletados (usid, saldo, data) select usid, saldo, data from deleted

    end

     

    -------------------------------------------------------------------------

    -- 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

    segunda-feira, 13 de outubro de 2008 14:30
  • Vlw Gustavo e Rafael....

     

    Com sua explicação e seus exemplos consegui fazer as alterações para a tabela que necessito....

    Tk´s

     

    [ ]´s

    segunda-feira, 13 de outubro de 2008 14:36
  • quais são os itens que devo acrescentar na trigger que me retornem o nome do usuário que fez o delete e o ip ou nome do micro onde foi feito o processo??

     

    segunda-feira, 13 de outubro de 2008 16:58
  • 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.

    segunda-feira, 13 de outubro de 2008 17:27
  • Grato Rafael....era isto mesmo que eu precisava....

     

    tks

    []´s

     

    segunda-feira, 13 de outubro de 2008 19:09
  • 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 deletados

    create 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 trigger

    create 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ídos

    select usid, saldo, data, usuario, maquina, dta from tbldeletados

     


     

    terça-feira, 14 de outubro de 2008 16:13
  •  

    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

     

     

    Abraços
    terça-feira, 14 de outubro de 2008 16:53
  • 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())
    GO

     

    CREATE TRIGGER TRG ON cartaosaldo
    FOR DELETE
    AS
    BEGIN
       INSERT INTO TBLDELETADOS (USID, SALDO, DATA)
            SELECT USID, SALDO, DATA
       FROM DELETED
    END

     

    SELECT * 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

    terça-feira, 14 de outubro de 2008 18:04
  • Se eu quiser alterar esta triger para pegar qualquer update nesta mesma tabela, basta trocar o delete por update???

     

     

    terça-feira, 14 de outubro de 2008 19:03
  •  

    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 Snippet

    CREATE TRIGGER TRG ON TBL
    FOR DELETE, UPDATE

     

    ou

     

    CREATE TRIGGER TRG ON TBL
    FOR DELETE, UPDATE, INSERT

     

     

     

    Abraços

     

    terça-feira, 14 de outubro de 2008 19:34
  • 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())
    GO

     

    CREATE 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

    terça-feira, 14 de outubro de 2008 19:43