FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Ayuda con un triste trigger...
Hola amigos/as del foro:
He estado rompiendome la cabeza para solucionar un asunto que no sé si podré solucionar y es que además de estar empezando con SQL Server, tampoco he podido o no he sabido encontrar algún ejemplo similar en el foro o en Internet . Espero que podais ayudarme con un trigger. Mi pregunta es la siguiente. Necesito que cada vez que se inserte o actualice un registro de una tabla, se asigne la fecha en que se realizó la operación. ¿Puedo realizar esto en un trigger (after update) de la tabla? Tengo algo parecido a lo siguiente: ALTER TRIGGER [TR_AU_TRIGGER1] ON [dbo].[TABLA] AFTER UPDATE AS BEGIN SET NOCOUNT OFF IF (UPDATE(CAMPO1) OR UPDATE(CAMPO1) OR UPDATE(CAMPO2)) BEGIN DECLARE @AHORA DATETIME SET @AHORA = GETDATE() UPDATE dbo.TABLA SET dbo.TABLAS.FECHA = @AHORA FROM inserted i, dbo.TABLA WHERE (i.CLAVE = dbo.TABLA.CLAVE) END END ¿Es correcto esto? Me refiero a que el tipo datetime tiene la fecha y la hora completa y no sé si por ahí puede estar el problema. Espero haberme explicado bien. Gracias por todo, Saludos. |
#2
|
|||
|
|||
Habia escrito una respuesta al tema pero después de verificar el triguer de prueba que hice en mi BD resulta que lo que había escrito no es correcto
Algún administrador me podría hacer el favor de borrar este post?? Disculpas por el inconveniente Última edición por sinalocarlos fecha: 09-10-2007 a las 17:46:18. |
#3
|
||||
|
||||
Prueba a hacerlo en el trigger BEFORE Update.
En el After Update ya no se graban cambios en el registro. Este tipo de trigger es para hacer cosas después de que los datos han sido escritos y que lo que se haga luego sea teniendo esto en cuenta. Yo trabajo con firebird, pero la lógica del BU y el AU debería ser la misma. Supongo además, que no debes hacer el update de tabla dentro del trigger, sino que lo único que debes hacer es modificar el valor de fecha. En firebird sería algo asi:
En SQLServer debe ser algo asi:
o quizás sea mejor sin definir variables intermedias:
Última edición por duilioisola fecha: 09-10-2007 a las 18:30:14. |
#4
|
||||
|
||||
Pequeña nota informativa.
En SQL Server no existe eso que tiene Interbase/Firebird de After update o Before update... etc.
Todos los triggers son AFTER... (Deleted, Inserted, Updated)
__________________
Tiempo y ocasión acontecen a todos! |
#5
|
||||
|
||||
ejemplos
Me faltó contestar el tema principal, sorry.
En SQL Server SI puedes hacer directamente un update a la misma tabla que te disparó el trigger (y el trigger no se va a disparar de manera recursiva en estos casos) Un ejemplo es este:
y el mismo ejemplo pero en mi interpretación es este:
Saludos.
__________________
Tiempo y ocasión acontecen a todos! |
#6
|
|||
|
|||
Muchas gracias a tod@s, sinalocarlos, duilioisola y nuk3sito.
Voy a probarlo en seguida, Saludos, Berto2003 |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
ayuda sobre trigger (disparadores) | gabrielflowers | PHP | 9 | 20-10-2007 01:43:43 |
...contento y triste.... | Jure | Humor | 5 | 27-08-2007 22:13:31 |
La neurona triste | santana | Humor | 9 | 15-06-2004 15:22:21 |
Ayuda con trigger...!! | Raptor | SQL | 3 | 26-04-2004 17:13:52 |
Ayuda con TRIGGER | Programer | Oracle | 1 | 22-03-2004 05:45:16 |
|