none
Trigger instead of delete duvidas RRS feed

  • Pergunta

  •  Ao executar um delete em um usuário, trocar a flag de 0 para 1 (0 ativo, 1 inativo).
    Trigger utilizando instead of, alguém pode me ajuda, sou leigo no assunto... não tenho nem ideia de onde começo, só ouvi fala q esse é o caminho usando instead of delete, meu chefe me pediu que foce feito dessa forma, sou estagiário e o pessoal não me ajuda muito.  
    segunda-feira, 3 de dezembro de 2012 12:44

Respostas

  • Robson, a trigger que deseja ficará assim...

    ALTER TRIGGER trd_Pessoa 
    ON dbo.Pessoa INSTEAD OF DELETE
    AS BEGIN
    	SET NOCOUNT ON
    	--
    	UPDATE		p
    	SET			status = 1
    	FROM		Pessoa		p
    	INNER JOIN	deleted		d
    				ON	p.codPessoa = d.codPessoa
    END

    Imagino que a tabela Pessoa possua chave primária, então, no exemplo eu estou utilizando o codPessoa que deve ser alterado de acordo com a sua realidade.

    OBS.: Nesse caso, a ação padrão "DELETE" será substituída pelo código no corpo da trigger, no caso o "UPDATE".

    Para mais informações consulte http://msdn.microsoft.com/pt-br/library/ms191208(v=sql.105).aspx


    Abçs


    • Editado _Juliano_Alves_ segunda-feira, 3 de dezembro de 2012 21:14
    • Marcado como Resposta Robson Carmo segunda-feira, 3 de dezembro de 2012 21:42
    segunda-feira, 3 de dezembro de 2012 21:01

Todas as Respostas

  • Olá,

    Para entender melhor, você vai deletar um registro em uma tabela e alterar o valor dessa flag para 1 em outra tabela, certo?

    segunda-feira, 3 de dezembro de 2012 13:00
  • Robson,

    Você poderia explicar o que esta querendo fazer?

    Por padrão quando se utiliza este tipo de trigger, o SQL Server não executa a transação que chamou o trigger mas somente o que esta dentro do Trigger.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    segunda-feira, 3 de dezembro de 2012 16:49
  • não vou esta deletando nada na verdade quando for chamado o delete ele altera na mesma tabela o campo status por exemplo:

    tenho uma tabela pessoa

    campos nome, end, status

    quando tentarem deletar  os dados da pessoa, ele não deleta ele muda o status de 1 p 0 assim quando eu busca esses dados eu busco só os dados q o status = a 1,

    eu sei q poderia simplesmente ao clicar em um botão delete eu poderia fazer um update do status seria muito mais fácil mais eles pediram p mim fazer assim p mim aprender. se poderem me dar um exemplo      

    segunda-feira, 3 de dezembro de 2012 18:21
  • isso exatamente, essa parte eu intendi, agora como faço para quando for chamado a função delete ele trocar o status como por exemplo:  

    enho uma tabela pessoa

    campos nome, end, status

    quando tentarem deletar  os dados da pessoa, ele não deleta ele muda o status de 1 p 0 assim quando eu buscar esses dados eu busco só os dados q o status =  1,

    eu sei q poderia simplesmente ao clicar em um botão delete eu poderia fazer um update do status seria muito mais fácil mais eles pediram p mim fazer assim p mim aprender. se poderem me dar um exemplo 

    já agradecendo a ajuda...

    segunda-feira, 3 de dezembro de 2012 18:24
  • Robson, a trigger que deseja ficará assim...

    ALTER TRIGGER trd_Pessoa 
    ON dbo.Pessoa INSTEAD OF DELETE
    AS BEGIN
    	SET NOCOUNT ON
    	--
    	UPDATE		p
    	SET			status = 1
    	FROM		Pessoa		p
    	INNER JOIN	deleted		d
    				ON	p.codPessoa = d.codPessoa
    END

    Imagino que a tabela Pessoa possua chave primária, então, no exemplo eu estou utilizando o codPessoa que deve ser alterado de acordo com a sua realidade.

    OBS.: Nesse caso, a ação padrão "DELETE" será substituída pelo código no corpo da trigger, no caso o "UPDATE".

    Para mais informações consulte http://msdn.microsoft.com/pt-br/library/ms191208(v=sql.105).aspx


    Abçs


    • Editado _Juliano_Alves_ segunda-feira, 3 de dezembro de 2012 21:14
    • Marcado como Resposta Robson Carmo segunda-feira, 3 de dezembro de 2012 21:42
    segunda-feira, 3 de dezembro de 2012 21:01