SQL Server - Trigger Para operaciones de traslado de productos en almacen

 
Vista:
sin imagen de perfil
Val: 45
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Trigger Para operaciones de traslado de productos en almacen

Publicado por nick (20 intervenciones) el 04/02/2020 19:08:30
Saludos cordiales de nuevo por aca, como notaron en la pregunta, quisiera un trigger que al hacer una inserción en la tabala de inventarios reste la existencia en la tabla existencia de los id de productos y el deposito de origen y al mismo tiempo sume la existencia de los id de productos y el deposito de destino, sino existe el deposito de destino que haga el insert, lo diseñe y solo me hace el trabajo con un solo insert perfectamente, pero cuando hago un insert masivo no funciona, aquí dejo el código para que se evalúe a ver que puedo estar haciendo mal:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
ALTER trigger [dbo].[Traslado] on [dbo].[Detalle_Opei]
after insert
as
 
set nocount on
 
Begin
--Descontar existencia del deposito de Origen
update E set E.Existen=E.Existen-i.Cantidad
from inserted i inner join Existencia E
on i.Id_Prod=e.Prod_Id where i.Id_Prod=e.Prod_Id
and i.UbicOrigen=e.Deposito;
 
end;
 
--Si existe el código y el deposito en la tabla de existencia aumenta la existencia
--del deposito de destino
 
If exists(select e.Prod_Id,e.Deposito from Existencia e
inner join inserted i on e.Prod_Id=i.Id_Prod
where i.Id_Prod=e.Prod_Id and i.UbicDestino=e.Deposito)
 
Begin
 
Update E set E.Existen=E.existen+i.Cantidad
From
inserted i inner join Existencia E
on e.Prod_Id=i.Id_Prod
 
where i.Id_Prod=e.Prod_Id and i.UbicDestino=e.Deposito
 
End;
 
else
--Si no existe el codigo y el deposito en la tabla de existencia hace un insert
Begin
insert into Existencia(Prod_Id,Deposito,Existen)
Select i.Id_Prod,i.UbicDestino,i.Cantidad from inserted i
End;
Gracias de antemano por su ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Trigger Para operaciones de traslado de productos en almacen

Publicado por Isaias (4558 intervenciones) el 04/02/2020 23:13:36
Los triggers fueron creados para cuidar el DRI de la base de datos, no para codficar la logica del negocio, ¿porque no lo hace en el procedimiento que inserta en inventarios?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 45
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Trigger Para operaciones de traslado de productos en almacen

Publicado por nick (20 intervenciones) el 06/02/2020 18:11:52
Saludos señor Isaias de nuevo gracias por sua tencion,es para aprovechar los datos que se almacenan en la tabla temporal del inserted y reutilizarlos para que me haga automaticamente despues del insert la operacion de descontar o aumentar existencia en los depositos,usando las cantidades el id el deposito que esta en la tabla inserted coincidentes con la tabla existencia,si ve una mejor manera por favor digamelo,o si al leer el codigo ve un posible error tambien le agradezco me ayude.mil gracias de nuevo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Trigger Para operaciones de traslado de productos en almacen

Publicado por Isaias (4558 intervenciones) el 07/02/2020 17:53:56
Ya te di la mejor practica, que lo haga el procedimiento que esta registrando las salidas o entradas del almacen, NO en un trigger
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar