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 |
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. |
Cita:
No sabia de esto... muy buen aporte... y yo que me daba el trabajo de borrar todo... |
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. |
Cita:
Salu2:p:D |
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 |
Comentario
DELETE FROM AREC02E WHERE CDGOCAB = @CDGOTEMP
Esta instruccion borrara todos los registros de la trabla sin usar cursor. No sera que tienes un trigger asociados a la tabla AREC02E? |
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!!!! |
solucionado
bueno tras más de dos meses en producción puedo asegurar que la opción que propuso Al Gonzalez funciona a las mil maravillas.... muchas gracias!!!! :D:D:D
|
La franja horaria es GMT +2. Ahora son las 10:36:05. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi