Trigger SQL SERVER 2005 dando ERRO

18/01/2012

0

Sou novo na criação de triggers e gostaria de alguma ajuda. Minha duvida é a seguinte criei uma trigger para ao deletar um registro da tabela MESTRE os dados sejam armazenados em outra tabela (OLDTABELA). Quando executo o comando para apagar um unico registro delete MESTRE where CODIGO = 1 a outra tabela é alimentada automaticamente sem problemas mas ao deletar toda tabela delete MESTRE ocorre esse erro:

Msg 512, Level 16, State 1, Procedure Trigger_MESTRE, Line 5
A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, <, <= , >, >= ou quando ela é usada como uma expressão.
A instrução foi finalizada.


Pelo que pude analizar o problema é justamente quando existe mais de um registro deletado causando o erro acima. Gostaria de saber se o correto seria dar um loop dentro da Trigger para que seja executado o comando insert um a um. Como fazer isso?

Outra duvida tambem é se sempre que preciso pegar um campo da tabela deletada dentro de uma trigger sempre tenho que fazer isso set @data = (select DATA from Deleted) ou tem uma maneira mais pratica?

codigo da trigger:
Create Trigger Trigger_MESTRE On MESTRE
For Delete
As
  declare @codigo int, @data datetime
  set @codigo = (select CODIGO from Deleted)
  set @data = (select DATA from Deleted)
  insert into OLDTABELA
    (OLD_TABELA, OLD_USERSQL, OLD_DATASQL, OLD_EVENTO, OLD_CODIGO, OLD_DATAMOV)
  values
    (MESTRE, suser_name(), getdate(), D, @codigo, @data)


Grato.
Carlos Eduardo

Carlos Eduardo

Responder

Posts

19/01/2012

Gustavo Bretas

E ae Carlos, tudo certo?

Não é nescessário fazer um looping dentro da trigger, mas vamos tentar modificar a forma que vc esta inserindo os registros na tabela!

Esse erro ocorre por conta desta linha:

set @codigo = (select CODIGO from Deleted)


Variável não comporta mais de um valor, como diz na mensagem.

Então tente fazer assim:

Create Trigger Trigger_MESTRE On MESTRE
For Delete
As
insert into OLDTABELA select MESTRE, suser_name(), getdate(), D, CODIGO, DATA from Deleted

Responder

19/01/2012

Carlos Eduardo

Ola Bretas blz, seguinte postei essa mesma duvida em outro forum, e me deram uma solução parecido com a sua. Vou postar o link aqui para que outros possam verificar tambem.

http://www.activedelphi.com.br/forum/viewtopic.php?t=70536&sid=437b1cfa6745f62e6c06a1a6cdd88519

Obrigado pela sugestão.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar