FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Trigger para eliminar en cascada master/detail
Hola a tod@s :
trabajo con D7, tengo una bbdd en SQL 2005 Express con unas tablas Master / Detail y he creado el siguiente trigger en la tabla Master (AREC01E) para que al eliminar un registro, elimine en cascada los registros de la tabla Detail (AREC02E) que le corresponden. El trigger es :
el trigger funciona correctamente si la tabla detail (AREC02E) tiene un único registro pero el problema viene cuando la tabla detail tiene más de un registro y produce el Código:
"error información de columna clave insuficiente o incorrecta, demasiadas filas afectadas por la actualización" muchas gracias a tod@s por la ayuda |
#2
|
||||
|
||||
Hola Toni.
No necesitas un disparador para la eliminación en cascada. Basta con que la restricción de llave foránea de la tabla detalle esté creada con la opción "On Delete Cascade". http://www.mssqlcity.com/Articles/Ge...onstraints.htm Saludos. |
#3
|
||||
|
||||
Cita:
No sabia de esto... muy buen aporte... y yo que me daba el trabajo de borrar todo...
__________________
BlueSteel |
#4
|
||||
|
||||
Es verdad lo de la llave foranea, pero no resuelve todos los casos.
El error que tiene tu trigger parece ser que es que debes utilizar un bucle para seleccionar cada línea y borrarla. No conozco SQL Server, pero supongo que debe ser algo así:
Resolver este problema te servirá por ejemplo cuando quieras guardar registros borrados en un log o hacer algunos recálculos sobre terceras tablas por cada registro borrado. |
#5
|
||||
|
||||
Cita:
Salu2
__________________
BlueSteel Última edición por BlueSteel fecha: 11-11-2010 a las 01:15:20. |
#6
|
||||
|
||||
Aqui te dejo el ejemplo
bueno, esto es un ejemplo que vi en un curso de SQL.... aunque aqui utiliza el Update... tendrias que cambiar por Delete.... Salu2
__________________
BlueSteel |
#7
|
||||
|
||||
uffff me había centrado en otro proceso del programa que fallaba y no he estado atento a vuestras respuestas... os pido disculpas a todos!!!!.
Esta aplicación la desarrollé hace tiempo en D7 y SQL2000 conectando con BDE, ahora estaba haciendo una nueva versión del programa utilizando ADO contra SQL2005 Express por cuestiones de costes para los clientes Ese trigger funcionaba correctamente en SQL2000 tal y como está, aunque para evitar sorpresas creo que me instalaré un SQL2000 para hacer pruebas y estar seguro. Al Gonzalez.... he mirado muy por encima la info que me indicas y voy a estudiarla a fondo ahora que tengo más tiempo. Muchas Gracias Duiliosola.... no soy un experto con SQL pero ese trigger funcionaba correctamente en SQL2000. De todas formas lo voy a comprobar BlueSteel... gracias por el ejemplo, lo voy a tener en cuenta ASAPLTDA..... la tabla AREC02E (detail) no tiene ningún trigger. Gracias a todos por las respuestas, os pido disculpas de nuevo por no contestar antes y si alguien ve dónde puede estar el error o qué estoy haciendo mal... que no dude en decirlo!!!! |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
DBLookupComboBoxs Master/Detail o Detail/Master | yusnerqui | OOP | 5 | 29-07-2005 19:40:20 |
eliminar en cascada con intebase | squenda | Firebird e Interbase | 1 | 06-08-2004 09:26:36 |
master/detail, imprimiendo master en cada hoja | acalderonr | Impresión | 4 | 29-11-2003 15:46:07 |
interbase:¿como crear un master-detail-detail? | ElSanto24 | Firebird e Interbase | 2 | 22-10-2003 11:24:45 |
Master/Detail/Detail/Detail/etc... | hgiacobone | Tablas planas | 2 | 24-07-2003 18:20:31 |
|