Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Hace un INSERT al ejecutarse un TRIGGER (SQL SERVER 2000)

Estas en el tema de Hace un INSERT al ejecutarse un TRIGGER (SQL SERVER 2000) en el foro de Bases de Datos General en Foros del Web. Hola es la primera vez que hago un trigger y supongo que por eso no me sale. Pues así va la cosa: el trigger se ...
  #1 (permalink)  
Antiguo 31/01/2009, 16:17
Avatar de Danielfuzz  
Fecha de Ingreso: septiembre-2007
Mensajes: 111
Antigüedad: 16 años, 7 meses
Puntos: 18
Pregunta Hace un INSERT al ejecutarse un TRIGGER (SQL SERVER 2000)

Hola es la primera vez que hago un trigger y supongo que por eso no me sale.
Pues así va la cosa: el trigger se ejecuta cada vez que hago un insert en una tabla llamada 'Venta', lo que el trigger hace es hacer un insert en otra tabla llamada 'FlujoCaja', pero al momento de comprobar la sintaxis me sale un error que dice:

Cita:
Error 128: El nombre 'Fecha' no es válido en este contexto. Sólo se permiten constantes, expresiones o variables. No se permiten nombre de columna.
Que anda mal?? Aca le pego el código del trigger:

Código:
CREATE TRIGGER IN_VENTA ON Venta
for insert
AS



INSERT INTO FlujoCaja (Fecha, FlujoDolares, FlujoBolivianos, SaldoDolares, SaldoBolivianos, Concepto, CodigoVenta, ID_Encargado) values (INSERTED.Fecha, INSERTED.CobradoDolares, INSERTED.CobradoBolivianos, INSERTED.CobradoDolares, INSERTED.CobradoBolivianos, 'Venta', INSERTED.ID, ID_Encargado)
  #2 (permalink)  
Antiguo 31/01/2009, 17:25
Avatar de Danielfuzz  
Fecha de Ingreso: septiembre-2007
Mensajes: 111
Antigüedad: 16 años, 7 meses
Puntos: 18
Respuesta: Hace un INSERT al ejecutarse un TRIGGER (SQL SERVER 2000)

Bueno despues de leer y leer por ahí, llegué a la conclusión de que se debe usar variables, esto significa que un pdf que me baje sobre triggers está mal, ya que en un ejemplo se muestra accediendo directamente al campo del campo insertado, es decir 'INSERTED.campo', caundo en realidad lo que hice fué crear una variable y luego asignar el valor de la siguiente manera:

Código:
declare @variable money
select @variable = Campo from INSERTED
Acá la resolución:

CREATE TRIGGER IN_VENTA ON Venta
FOR INSERT
AS

Código:
declare @s_d money
select @s_d = SaldoDolares from FlujoCaja where fechaHora = (select max(fechaHora) From FlujoCaja)
declare @s_b money
select @s_b = SaldoBolivianos from FlujoCaja where fechaHora = (select max(fechaHora) From FlujoCaja)
declare @in_f as datetime 
select @in_f = fecha from INSERTED
declare @in_cd money
select @in_cd = CobradoDolares from INSERTED
declare @in_cb money
select @in_cb = CobradoBolivianos from INSERTED
declare @in_ID int
select @in_ID = ID from INSERTED
declare @in_IDE int
select @in_IDE = ID_Encargado from INSERTED

INSERT INTO FlujoCaja (FechaHora, FlujoDolares, FlujoBolivianos, SaldoDolares, SaldoBolivianos, Concepto, CodigoVenta, ID_Encargado)  VALUES (@in_f, @in_cd, @in_cb, @s_d + @in_cd ,@s_b + @in_cb, 'Venta', @in_ID, @in_IDE)
  #3 (permalink)  
Antiguo 31/01/2009, 17:28
Avatar de Danielfuzz  
Fecha de Ingreso: septiembre-2007
Mensajes: 111
Antigüedad: 16 años, 7 meses
Puntos: 18
Respuesta: Hace un INSERT al ejecutarse un TRIGGER (SQL SERVER 2000)

Un poco tedioso eso de declarar un monton de variables, ..... en lugar de indicar directamente el 'INSERTED.Campo' en el 'INSERT INTO'.

Si alguien sabe una manera menos tediosa se lo agradeceré, total de esta manera funciona igual.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:04.