SQL Server - trigger

   
Vista:

trigger

Publicado por valbar (3 intervenciones) el 22/11/2010 19:56:46
estoy haciendo un sistema de inventario
entonces tengo una tabla productos que es donde ingreso el idproducto,nombreproducto, precio.

hay otra tabla que se llama bodega que ahi es donde se ingresa la cantidad.

tambien hay otra tabla que se llama existencia que lleva los campos id producto,nombre producto, existencia.

Hice un trigger en la tabla de articulos para que cuando ingrese los datos en la tabla se copien en la tabla existencia.

Ahora lo que quiro es que cuando ingrese la cantidad ingresada en la tabla bodega se agregue tambien en la tabla existencia pero en la misma fila o sea yo lo hice tambien haciendo un trigger en la tabla bodega y se me agrega en la tabla existencia pero en otra fila no en la misma
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

RE:trigger

Publicado por Loría (56 intervenciones) el 22/11/2010 21:31:53
Okas, basados en esta información hay dos opciones según entiendo:

1) No se como estás haciendo el segundo trigger, pero si estás utilizando un INSERT logicamente te lo va a agregar en una fila nueva. Deberías de utilizar un UPDATE.

2) Como te indiqué anteriormente, sería ideal que nos pases las estucturas de las tablas que estas manipulando y los triggers (muy importante). Me refiero al T-SQL (el código), no que me digas que hace cada trigger, eso no es suficiente para encontrar el error.

Saludos.

Loría.
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

RE:trigger

Publicado por VALBAR (3 intervenciones) el 23/11/2010 05:43:13
Intente hacer otro trigger en la tabla bodega y es este

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

create trigger insertBodega on Bodega
after Insert
as
Begin

Declare @DesArticulo nvarchar(50)
Declare @IdArticulo int
Declare @CantidadIngresada int
Declare @ColCheck int

Set @IdArticulo=(select top 1 IdArticulo from Inserted)
Set @CantidadIngresada=(select top 1 CantidadIngresada from Inserted)
Set @DesArticulo=(select top 1 DesArticulo from Inserted)
Set @ColCheck= (select Count(*) from Existencia where DesArticulo=@DesArticulo and IdArticulo=@IdArticulo)
if @ColChek >0
Begin
Update Existencia set CantidadIngresada=@CantidadIngresada where DesArticulo=@DesArticulo and IdArticulo=@IdArticulo
End

Else
Begin
insert into Existencia Values(@IdArticulo,@DesArticulo,@CantidadIngresada)
End

End


Y ME SALE QUE TENGO QUE DECLARAR LA VARIABLE ESCALAR @COLCHECK

Y QUE HAY UN ERROR POR ELSE

YO PENSE QUE CON ESTE TRIGGER ME FUNCIONARIA PERO NADA
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

RE:trigger

Publicado por Isaias (3180 intervenciones) el 23/11/2010 17:46:36
Como te comente en otro foro, ¿te has puesto a pensar que en tu tabla INSERT puedes tener muchos registros?
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

RE:trigger

Publicado por Leonardo Josué (79 intervenciones) el 23/11/2010 18:44:48
Buenos días VALBAR, el error que comentas creo que es bastante claro... hay una variable que no está declarada. Por un lado tienes esto:

Declare @ColCheck int
Set @ColCheck= (select Count(*) from Existencia where DesArticulo=@DesArticulo

Hasta aquí todo está correcto, pero aquí está el problema:
if @ColChek >0

Si pones un poquito de atención te darás cuenta de que @ColCheck NO ES IGUAL A @ColChek (y si aun así no te queda claro TE FALTA UNA LETRA "C" ANTES DE LA LETRA "K")

En cuanto a lo que comenta Isaías acerca de que la tabla inserted tenga más de un registro tú estás tomando el TOP 1, no se qué tan bueno sea eso, es cuestión de que revises tu lógica de negocio. Y finalmente, creo que podrías cambiar todo esto:

Set @IdArticulo=(select top 1 IdArticulo from Inserted)
Set @CantidadIngresada=(select top 1 CantidadIngresada from Inserted)
Set @DesArticulo=(select top 1 DesArticulo from Inserted)

Por esto:

select top 1 @IdArticulo = IdArticulo, @CantidadIngresada = CantidadIngresada, @DesArticulo = DesArticulo from Inserted

Es decir, hacer solo una consulta en lugar de tres

Saludos
Leo.
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

RE:trigger

Publicado por Isaias (3180 intervenciones) el 24/11/2010 00:25:50
Seria cuestion de ponernos de acuerdo en cual de TODOS los foros vamos a contestar, ya que estamos desgastando "cuetes en infiernitos".

En cuanto a lo de muchos registros, tal vez seria hacer una sumatoria de todos los registros, ahora bien, surge otra duda, ¿que pasa si alguien hace un UPDATE o INSERT via el analizador de consultas?

Saludos.
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

RE:trigger

Publicado por Leonardo Josué (79 intervenciones) el 24/11/2010 15:57:27
De acuerdo contigo Isaias, y lo peor es que valbar ni siquiera tiene la delicadeza de responder a los mensajes que se han publicado. Una verdadera lástima.

Saludos
Leo.
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

RE:trigger

Publicado por Isaias (3180 intervenciones) el 25/11/2010 19:19:11
Pues asi pasa, esto de los foros, es dar si pedir nada a cambio.

Saludos
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