desencadenantes

08/07/2007 - 19:47 por roberto tactac | Informe spam
Hola a todos
Hace unos meses que estoy con SQL y necesito un ayuda para crear un
desencadenante en la tabla de articulos, Las tablas son:

SQL server 2000

Articulos (idarticulo,detalle,precioventa,,)
existencia(idarticulo,iddeposito,cantidad)
depositos(iddeposito,nombre,idciudad,idsucursal,fechaultinventario)


El requerimiento seria cada vez que se ingresa un articulo nuevo agregue las
filas correspondiente en la tabla de existencias teniendo en cuenta la
cantidad de depositos que halla, osea que tendria que agregar un registro
por cada deposito

Bueno , muchas gracias de antemano a quien me pueda ayudar

Roberto tactac
Buenos Aires - Argentina
rtactac@gmail.com
 

Leer las respuestas

#1 Ricardo Passians
08/07/2007 - 21:14 | Informe spam
El requerimiento seria cada vez que se ingresa un articulo nuevo agregue
las filas correspondiente en la tabla de existencias teniendo en cuenta la
cantidad de depositos que halla, osea que tendria que agregar un registro
por cada deposito



Imagino que te refieres a crear un registro con la existencia en cero para
depósito y artículo. Para luego ir actualizado la existencia allí. Es asi?
Si lo es ,creo que es un error de diseño porque desperdicia espacio sin
necesidad. Para recuperar bastaría con Left Join's y usar ISNULL.
Además, puede que debas considerar mejor una vista indizada ya que de no
tenerla, te exigirá varios triggers en varias tablas con lo cual ese diseño
será más difícil de mantener.

De todos modos, si te comprendí bien, el trigger que estas pidiendo para la
tabla Existencia sería algo como esto: (Pero ten presente que debes tener
uno similar también para la tabla Depósitos, pues es lógico que estos no
sean estáticos necesariamente, como parece que estás suponiendo).

create trigger tr_IUD_existencia ON dbo.existencia
for Insert, Update, Delete
AS
delete Existencia
from Existencia inner join Deleted D on Existencia.idarticulo=D.idarticulo

depósito/artículo
insert Existencia (idarticulo, iddeposito, cantidad)
select I.idarticulo, Depositos.iddeposito,0 from inserted I
CROSS JOIN Depositos

/* el truco está en el Cross Join*/


Saludos

Ricardo Passians

Preguntas similares