Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
jescudeiro Aprendiz

Registrado: Segunda-Feira, 2 de Abril de 2012 Mensagens: 261 Localização: ribeirao preto
|
Enviada: Ter Jul 31, 2012 9:44 pm Assunto: A subconsulta retornou mais de 1 valor. Isso não é permitido |
|
|
boa noite amigos,
tenho uma tabela movimento e movimento_itens. tenho duas triggers uma q baixa do saldo de produtos qdo insiro um item na tabela movimento_itens e outra que delete da mesma.
Qdo vou usar a trigger para deletar varios itens ao mesmo tempo do movimento_itens da o erro acima.
segue codigo, muito obrigado
Create Trigger T_AtualizarSaldosProdutosGod
On
[Movimento_Itens]
For
Delete
As
Set NoCount On
Declare @Condicao Char(1)
Set @Condicao=(Select es From Deleted)
If @Condicao='E'
Begin
Update Produtos
Set Estoque_Atual = (S.Estoque_Atual - I.Qdade)
from Produtos S Inner Join Deleted I
On S.CodigoInterno = I.CodProduto
End
If @Condicao='S'
Begin
Update Produtos
Set Estoque_Atual = (S.Estoque_Atual + I.Qdade)
from Produtos S Inner Join Deleted I
On S.CodigoInterno = I.CodProduto
End |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Jul 31, 2012 10:03 pm Assunto: |
|
|
Boa noite,
Desconfio que este erro está ocorrendo pela forma como funciona a trigger no SQL Server, conforme foi dito no tópico abaixo:
http://www.activedelphi.com.br/forum/viewtopic.php?p=367530&sid=79af0ce51317746ce43f46f37e701e38
Experimente remover todo o código em que a variável @Condicao está envolvida, para depois substituir os 2 updates por apenas um conforme segue abaixo:
Código: | Update Produtos
Set Estoque_Atual = Estoque_Atual + (case when I.es = 'E' then I.Qdade * -1 else I.Qdade end)
from Produtos S
Inner Join Deleted I On S.CodigoInterno = I.CodProduto |
Espero que ajude. |
|
Voltar ao Topo |
|
 |
|