Inquiridor
Problema com Cascade Delete.

Pergunta
-
Pessoal tenho a seguinte situação, uma tabela de Pedidos e uma de Itens:
Pedidos
(
cod_pedido int,
cod_cliente int,
tipo int
)
Itens
(
cod_pedido int,
cod_produto int,
quantidade int
)
Na tabela de itens tem uma trigger que faz a devida movimentação do estoque, de acordo com o tipo de pedido, seguindo a seguinte regra:
Tipo = 1 : Diminue o estoque
Tipo = 2 : Aumenta o estoque
A referencia de itens para pedidos tem cascade delete, eu acho que de acordo com o cascade delete o sql server deveria apagar primeiro os itens e depois o pedido, e o que esta acontecendo é que quando a trigger é executada o pedido já não existe mais e eu não consigo saber qual o tipo do pedido.
Alguem pode me dizer o por que isso ta acontecendo, e se tem uma possivel solução?
Obrigado a todos.
At;
Ricardo Lima
Todas as Respostas
-
-
-
-
-
-
Segue ai pessoal
Create Trigger TG_ITENS_CONTROLA_ESTOQUE
On ITENS
For DELETE
As
Begin
Set NoCount On;
Set Xact_Abort On;
Begin Transaction;
Declare @CodProduto int;
Declare @Quantidadde int;
Declare @Tipo Int;
Declare Produtos Cursor Local For
Select COD_PRODUTO,QUANTIDADE,TIPO
From DELETED I
Inner Join PEDIDOS P On I.COD_PEDIDO = P.COD_PEDIDO
Open Produtos;
//Nesse ponto o curor não traz dados pois o pedido na tabela de pedidos já não existe mais
//Eu cheguei a colocar código abaixo para confirmar
// Declare @i int;
// Declare @pedido int;
//Select @pedido = cod_pedido from DELETED
//select @i = count(*) from pedidos where cod_pedido = @pedido
//print @i
// @i sempre está 0(zero)
//Código da movimentação de estoque
Commit Transaction;
End -
-
Alexandre,
Mas uma vez devo concordar com você.
Particularmente falando eu não gosto de utilizar este tipo de funcionalidade, Update Cascade ou Delete Cascade, por questões de regras de négocio, como também pelo custo de processamento que isso possa gerar, que é algo parecido com o Trigger.
Também você como uma solução interessante fazer todo este tipo de tratamento na aplicação, mas é claro que algumas regras de negócios, ficam melhores a nível de gerenciamento e administração quando implentadas dentro de banco de dados.
-
Alexandre obrigado pelas respostas,
Acho que não é confusão minha, o cascade delete realmente faz o que eu quero, quando apagar o pai ele apaga os filhos, pelo lógica acho que ele deveria primeiro apagar os filhos e depois apagar o pai, o que está acontecendo que quando vai apagar os filhos o pai já não existe mais. -
-