Trigger SQL SERVER 2005 dando ERRO
18/01/2012
0
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
Posts
19/01/2012
Gustavo Bretas
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
19/01/2012
Carlos Eduardo
http://www.activedelphi.com.br/forum/viewtopic.php?t=70536&sid=437b1cfa6745f62e6c06a1a6cdd88519
Obrigado pela sugestão.
Clique aqui para fazer login e interagir na Comunidade :)