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

Trigger para crear registro cuando se borre otro

Estas en el tema de Trigger para crear registro cuando se borre otro en el foro de SQL Server en Foros del Web. Buenas. El problema que tengo, es que necesito que mediante un trigger, cuando se elimina un registro de una tabla, se inserte un registro en ...
  #1 (permalink)  
Antiguo 04/12/2013, 09:53
 
Fecha de Ingreso: diciembre-2007
Mensajes: 79
Antigüedad: 16 años, 11 meses
Puntos: 0
Trigger para crear registro cuando se borre otro

Buenas.

El problema que tengo, es que necesito que mediante un trigger, cuando se elimina un registro de una tabla, se inserte un registro en otra tabla, con los valores de la primera.

En teoría no es tan difícil, pero no se porque razón con todo lo que intento me genera cientos de filas. no doy con el problema.

LIBRAS!! ayuda!jeje
Código SQL:
Ver original
  1. CREATE TRIGGER [dbo].[deletehistorico] ON [dbo].[Presentes]
  2. FOR DELETE
  3. AS
  4. BEGIN
  5.  
  6.   INSERT INTO GestionAforo.dbo.EntradasSalidasMes
  7.   ( FechayHoraSalida, Nombre, Apellidos, Empresa)
  8.   SELECT  CURRENT_TIMESTAMP, DASS.dbo.Personas.Nombre, DASS.dbo.Personas.Apellidos, Empresa FROM DASS.dbo.Presentes, DASS.dbo.Personas, DASS.dbo.Empresas deleted
  #2 (permalink)  
Antiguo 04/12/2013, 10:01
 
Fecha de Ingreso: diciembre-2007
Mensajes: 79
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Trigger para crear registro cuando se borre otro

creo que lo he mejorado algo...

Código SQL:
Ver original
  1. ALTER TRIGGER [dbo].[deletehistorico] ON [dbo].[Presentes]
  2. FOR DELETE
  3. AS
  4. BEGIN
  5.  
  6.   INSERT INTO GestionAforo.dbo.EntradasSalidasMes
  7.   ( FechayHoraSalida, Nombre, Apellidos, Empresa)
  8.   SELECT  CURRENT_TIMESTAMP, DASS.dbo.Personas.Nombre, DASS.dbo.Personas.Apellidos, Empresa FROM DASS.dbo.Presentes, DASS.dbo.Personas, DASS.dbo.Empresas WHERE DASS.dbo.Presentes.id=(SELECT id FROM deleted)
pero ahora en vez de modificar cientos de tablas no modifica ninguna

Última edición por gnzsoloyo; 04/12/2013 a las 11:19
  #3 (permalink)  
Antiguo 04/12/2013, 10:09
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Trigger para crear registro cuando se borre otro

a ver si entendi, quieres que se inserten los registros eliminados en otra tabla???'
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 04/12/2013, 10:15
 
Fecha de Ingreso: diciembre-2007
Mensajes: 79
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Trigger para crear registro cuando se borre otro

Cita:
Iniciado por Libras Ver Mensaje
a ver si entendi, quieres que se inserten los registros eliminados en otra tabla???'
si, Los registros que sean borrados de la tabla presentes, se inserten en la tabla EntradasSalidasMes
  #5 (permalink)  
Antiguo 04/12/2013, 10:17
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Trigger para crear registro cuando se borre otro

a entonces es sencillo :P

Código SQL:
Ver original
  1. ALTER TRIGGER [dbo].[deletehistorico] ON [dbo].[Presentes]
  2. FOR DELETE
  3. AS
  4. BEGIN
  5.  
  6. INSERT INTO GestionAforo.dbo.EntradasSalidasMes
  7. ( FechayHoraSalida, Nombre, Apellidos, Empresa)
  8. SELECT fechayhorasalida,nombre,apellidos,empresa FROM deleted

Aclaro los campos FechayHoraSalida, Nombre, Apellidos, Empresa que necesitas los tienes que tomar de la tabla deleted, para saber que tiene la tabla deleted puedes usar:

Código SQL:
Ver original
  1. ALTER TRIGGER [dbo].[deletehistorico] ON [dbo].[Presentes]
  2. FOR DELETE
  3. AS
  4. BEGIN
  5. SELECT * FROM deleted
  6. INSERT INTO GestionAforo.dbo.EntradasSalidasMes
  7. ( FechayHoraSalida, Nombre, Apellidos, Empresa)
  8. SELECT fechayhorasalida,nombre,apellidos,empresa FROM deleted

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 04/12/2013, 10:24
 
Fecha de Ingreso: diciembre-2007
Mensajes: 79
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Trigger para crear registro cuando se borre otro

Gracias Libras, por que me complicare tanto... jajaja

Lo único, que hay algunos campos que vienen referenciados de otras tablas, hay algún problema con eso?
  #7 (permalink)  
Antiguo 04/12/2013, 10:29
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Trigger para crear registro cuando se borre otro

entonces encuentra la referencia de los campos, analiza los datos que traes en la tabla deleted y ve cuales te sirven y con cuales puedes realizar la referencia :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 04/12/2013, 10:32
 
Fecha de Ingreso: diciembre-2007
Mensajes: 79
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Trigger para crear registro cuando se borre otro

ah ok, pero es posible hacerlo, no es necesario que estén los datos en deleted... menos mal. Muchas gracia, me pongo a ello.
  #9 (permalink)  
Antiguo 04/12/2013, 10:50
 
Fecha de Ingreso: diciembre-2007
Mensajes: 79
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Trigger para crear registro cuando se borre otro

buenas, sigo teniendo los mismos problemas Libras. si no le añado FROM deleted, DASS.dbo.Presentes, DASS.dbo.Personas, DASS.dbo.Empresas me dice que no puede enlazar a estos DASS.dbo.Personas.Nombre...

Se que tiene que ser una tontería, y siento ser tan pesado, pero llevo todo el día con ello y no se me ocurren mas cambios. De nuevo Mil gracias

Código SQL:
Ver original
  1. ALTER TRIGGER [dbo].[deletehistorico] ON [dbo].[Presentes]
  2. FOR DELETE
  3. AS
  4. BEGIN
  5.  
  6.   INSERT INTO GestionAforo.dbo.EntradasSalidasMes
  7.   ( FechayHoraSalida, Nombre, Apellidos, Empresa)
  8.   SELECT  CURRENT_TIMESTAMP, DASS.dbo.Personas.Nombre, DASS.dbo.Personas.Apellidos, Dass.dbo.Empresas.Empresa FROM deleted, DASS.dbo.Presentes, DASS.dbo.Personas, DASS.dbo.Empresas WHERE DASS.dbo.Presentes.id=deleted.id
  9.  
  10. END

Última edición por gnzsoloyo; 04/12/2013 a las 11:20
  #10 (permalink)  
Antiguo 04/12/2013, 10:52
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Trigger para crear registro cuando se borre otro

puedes poner un ejemplo de los datos, tanto de la tabla deleted como de las demas tablas???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 04/12/2013, 10:59
 
Fecha de Ingreso: diciembre-2007
Mensajes: 79
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Trigger para crear registro cuando se borre otro

En la tabla Presentes que sera de la que se eliminen los registros:

Código tabla:
Ver original
  1. id  FechayHoradeEntrada                           Nombre    FkPersona   FkEmpresa
  2. 6   2013-12-04 16:12:00.0000000 +00:00           J.Ignacio      7             7
  3. 7   2013-12-04 16:21:00.0000000 +00:00           J.Ignacio      7            7
  4. 8   2013-12-04 16:24:25.6800000 +00:00          J.Ignacio      7              7
  5. 9   2013-12-04 16:26:30.1930000 +00:00           J.Ignacio       7              7
  6. 11  2013-12-04 16:26:32.1500000 +00:00          J.Ignacio        7              7

contiene unicamente claves externas que llevan a las tablas DASS.dbo.Personas y Dass.dbo.Empresas
  #12 (permalink)  
Antiguo 04/12/2013, 11:06
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Trigger para crear registro cuando se borre otro

ok :)

Código SQL:
Ver original
  1. ALTER TRIGGER [dbo].[deletehistorico] ON [dbo].[Presentes]
  2. FOR DELETE
  3. AS
  4. BEGIN
  5.  
  6. INSERT INTO GestionAforo.dbo.EntradasSalidasMes
  7. ( FechayHoraSalida, Nombre, Apellidos, Empresa)
  8. SELECT CURRENT_TIMESTAMP, DASS.dbo.Personas.Nombre, DASS.dbo.Personas.Apellidos, Dass.dbo.Empresas.Empresa FROM  DASS.dbo.Personas, DASS.dbo.Empresas WHERE DASS.dbo.personas.id=(SELECT fkpersona FROM deleted) AND DASS.dbo.Empresas=(SELECT fkempresa FROM deleted)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: fecha, registro, select, tabla, trigger
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 19:23.