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

Ayuda con trigger

Estas en el tema de Ayuda con trigger en el foro de SQL Server en Foros del Web. SAludos tengo una pregunta no se como hacer ya sea un procedmiento o un trigger, digamos tengo una tabla con id,fecha,tipodecambio debe haber solo un ...
  #1 (permalink)  
Antiguo 18/12/2006, 16:43
 
Fecha de Ingreso: diciembre-2003
Mensajes: 595
Antigüedad: 20 años, 4 meses
Puntos: 1
Ayuda con trigger

SAludos tengo una pregunta no se como hacer ya sea un procedmiento o un trigger, digamos tengo una tabla con id,fecha,tipodecambio

debe haber solo un tipo de cambio por dia, como puedo hacer para que cuando alguien quiera hacer un insert o update me aparesca solo una leyenda que ya existe un tipo de cambio de ese dia y que no se puede agregar o modificar
  #2 (permalink)  
Antiguo 18/12/2006, 22:26
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Re: Ayuda con trigger

IF EXISTS(SELECT 1 FROM TABLA WHERE TIPODECAMBIO = @TIPODECAMBIO AND DAY(FECHA) = DAY(GETDATE()) AND MONTH(FECHA) = MONTH(GETDATE()) AND YEAR(FECHA) = YEAR(GETDATE())) BEGIN
/*RETORNAR CON ERROR PARA DESPLEGAR EL MSG*/
END
ELSE BEGIN
/*GRABAR*/
END

Saludos!
  #3 (permalink)  
Antiguo 19/12/2006, 10:46
 
Fecha de Ingreso: diciembre-2003
Mensajes: 595
Antigüedad: 20 años, 4 meses
Puntos: 1
Re: Ayuda con trigger

gracias por responder pero me envia un error
  #4 (permalink)  
Antiguo 19/12/2006, 21:33
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: Ayuda con trigger

Lo más sencillo sería crear un índice UNIQUE sobre el campo de fecha. Esto permitirá una única fecha dentro de tu tabla.

En sistemás más completos seguramente tienes la llave del código de moneda (para manejar varias monedas), y la respuesta es la misma, basta expandir el índice para que sea IdMoneda+Fecha

PD. Que por lo que cuentas eso debería ser tu llave primaria y no simplemente un índice UNIQUE.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #5 (permalink)  
Antiguo 19/12/2006, 23:35
 
Fecha de Ingreso: diciembre-2003
Mensajes: 595
Antigüedad: 20 años, 4 meses
Puntos: 1
Re: Ayuda con trigger

Creo que es mas facil crear un trigger para evitar la insercion de de un nuevo registro si ya exixte la fecha, pero no se como hacer lo alguien me podria indicar que valores tomar o darme la idea se los agradeecria mucho
  #6 (permalink)  
Antiguo 22/12/2006, 09:31
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Re: Ayuda con trigger

nop, es mas fácil que hagas las cosas como se debe, a la larga lo agradeceras....

Mithrandir:
lo de crear la el indice con la fecha estaría bueno, pero como hacer para que te considere por día? no por segundos?
es decir, si haces que la fecha sea parte de tu llave te va a permitir dos registros del mismo tipo de moneda para el mismo día, solo que con hh:mm:ss diferentes, ó me equivoco? nunca he hecho una fecha como llave

hakunamatata:
lo de la solucion que te puse dices que te dio error, por que no lo pones para saber que pasa

Saludos
  #7 (permalink)  
Antiguo 22/12/2006, 12:51
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: Ayuda con trigger

No puedes Tienes que insertar solamente aaaa-mm-dd omitiendo la hora para que funcione como debe. SQL Server no tiene tipos de datos para solo fechas (que como los extraño).

Lo que hago para asegurarlo (cuando no me puedo fiar del método de ingreso) es usar un trigger INSTEAD OF para asegurar que omito la parte de la fecha. Aunque en este caso es precisamente la creación del trigger lo que queremos evitar.

...Se me ocurre crear un CONSTRAINT dentro del campo para validar que solo haya horas 00:00 y así eliminas el trigger, aunque cuando la regla falle te ocasionará un ROLLBACK en lugar de hacerlo transparente para el usuario.


Hunabuku,
No, no es más fácil un trigger. Un indice lo hace todo automáticamente, aunque Gabo acaba de postear la limitación de hacerlo por índice. Pero si lo prefieres necesitas algo como esto:

CREATE TRIGGER TRi_mitrigger ON tabla
FOR INSERT
AS

IF (SELECT Count(*) FROM tabla GROUP BY fecha) > 1
ROLLBACK TRANSACTION

Esto porque los nuevos registros ya los ves dentro de la tabla cuando corres el trigger, ni siquiera necesitas lidiar con la tabla Inserted
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #8 (permalink)  
Antiguo 22/12/2006, 13:34
 
Fecha de Ingreso: diciembre-2003
Mensajes: 595
Antigüedad: 20 años, 4 meses
Puntos: 1
Re: Ayuda con trigger

Gracias lo voy a probar
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 15:40.