SQL - Borrado en cascada

 
Vista:

Borrado en cascada

Publicado por Ariasss (18 intervenciones) el 04/07/2008 11:38:20
Bien. Gracias de antemano. Os explico mi situación:

Tengo estas tres tablas tal que así:

Ley (IDNum)
Tener (IDNum, NLinea)
Xml (NLinea)

La tabla Tener son claves foráneas de sus respectivas tablas...

Bien... Al borrar una tupla de la Tabla Ley, me borra dicha tupla y a la que referencia en la Tabla Tener (a través del SQL Server 2.005 le he dicho que la Regla de Eliminación entre Ley y Tener sea en Cascada) PEROOOOO no me quita las tuplas correspondientes de la tabla Xml (Y también he probado a poner la Regla de Eliminación entre Tener y Xml en Cascada...).

No sé cómo arreglar esto...
¿Alguien puede ayudarme?

GRACIAS.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Borrado en cascada

Publicado por pacopaz (143 intervenciones) el 04/07/2008 17:26:00
Lo que pasa es que la cascada funciona para relaciones 1 a 1 o 1 a N, en tu caso, lo más probable es que tengas esto:
|Ley|1--N|Tener|N--1|Xml|
Lo que imposibilita dicha funcionalidad.
Tienes que definir la relación Tener --> Xml, de tal forma que 1 registro en la tabla 'Tener' tenga muchos registros en la tabla 'Xml' para que funcione la cascada a este segundo nivel.
Ahora, si esto no es correcto, es decir, que efectivamente un registro de 'Xml' se refiera a muchos registros en 'Tener', lo que puede hacer es un trigger en la tabla 'Ley', para Before Delete, que, cuando borre un registro borre también los registros correspondientes de 'Xml', para que esto, aunque nos ea en cascada, logre el resultado que deseas.
Espero que te sirva.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Borrado en cascada

Publicado por Ariasss (18 intervenciones) el 07/07/2008 08:23:28
OK... Gracias Pacopaz. Me tengo que poner a repasarme los triggers de nuevo, que los tengo un poco olvidados...
GRACIAS de nuevo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Borrado en cascada

Publicado por Ariasss (18 intervenciones) el 07/07/2008 17:31:03
Bien... Pude realizar el trigger y hasta FUNCIONA y todo... pero... cuando doy a borrar la Ley... me borra a través del delete cascade lo de la tabla Tener y a través del Trigger, lo de la tabla pruebaxml, pero me salta un error de servidor. Este es el error:

El argumento especificado está fuera del intervalo de valores válidos.
Nombre del parámetro: value
Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

Detalles de la excepción: System.ArgumentOutOfRangeException: El argumento especificado está fuera del intervalo de valores válidos.
Nombre del parámetro: value

Error de código fuente:

Se ha generado una excepción no controlada durante la ejecución de la solicitud Web actual. La información sobre el origen y la ubicación de la excepción pueden identificarse utilizando la excepción del seguimiento de la pila siguiente.

Seguimiento de la pila:

[ArgumentOutOfRangeException: El argumento especificado está fuera del intervalo de valores válidos.
Nombre del parámetro: value]
System.Web.UI.WebControls.GridView.set_SelectedIndex(Int32 value) +79
System.Web.UI.WebControls.GridView.HandleDeleteCallback(Int32 affectedRows, Exception ex) +495
System.Web.UI.DataSourceView.Delete(IDictionary keys, IDictionary oldValues, DataSourceViewOperationCallback callback) +227
System.Web.UI.WebControls.GridView.HandleDelete(GridViewRow row, Int32 rowIndex) +914
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +1041
System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs e) +163
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +56
System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source, EventArgs e) +119
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +56
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +106
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +175
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +31
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +32
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +242
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3824

No sé por qué, al poner el trigger me salta el error este... NO LO ENTIENDO¡¡¡¡¡
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Borrado en cascada

Publicado por pacopaz (143 intervenciones) el 07/07/2008 17:47:29
Este error te salta desde la página web, es correcto?
Tienes que corregirlo desde ahí, por que no creo que sea problema del trigger, por que todo lo que veo, según entiendo, es error de asp.
Te lo digo, por que según me comentas, tu trigger funciona.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Borrado en cascada

Publicado por Ariasss (18 intervenciones) el 08/07/2008 08:35:17
Si si, si el trigger funciona... el caso es que si NO pongo el Trigger... no me salta excepción en la página web (aunque no me hace lo que tendría que hacer)... por lo que eso me mosquea MUCHO¡¡¡¡¡
No entiendo a qué puede ser debido...
Gracias de todas formas¡¡¡¡
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Borrado en cascada

Publicado por Ariasss (18 intervenciones) el 08/07/2008 08:38:59
PacoPaz, ¿en dónde tengo que poner el trigger?
Porque si te acuerdas, lo he puesto en la tabla "Ley"... pero no sé en dónde tengo que integrarlo... es decir... ¿cómo pongo un trigger con SQL Server?
A ver si ese va a ser mi problema...
Por cierto, una vez que creo un trigger (create trigger), después al final, tengo que borrarlo para que se pueda volver a ejecutar??? (drop trigger)
Porque el replace no me dejaba ponerlo, más bien, lo que no me dejaba poner era el create OR replace (el OR no me dejaba ponerlo).

Pues eso, mi pregunta es, que en qué parte tengo que poner el trigger???
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar