MS SQL “ON DELETE CASCADE” più chiavi esterne che puntano alla stessa tabella?

Howdy, ho un problema in cui ho bisogno di una cascata su più chiavi esterne che puntano allo stesso tavolo ..

[Insights] | ID | Title | | 1 | Monty Python | | 2 | Spamalot | [BroaderInsights_Insights] | broaderinsight_id | insight_id | | 1 | 2 | 

Fondamentalmente quando uno o due record nella tabella delle statistiche viene cancellato, ho bisogno che la relazione sia cancellata ..

Ho provato questo:

  CREATE TABLE broader_insights_insights(id INT NOT NULL IDENTITY(1,1), broader_insight_id INT NOT NULL REFERENCES insights(id) ON DELETE CASCADE, insight_id INT NOT NULL REFERENCES insights(id) ON DELETE CASCADE, PRIMARY KEY(id)) Go 

Ciò provoca l’avvertimento che la cascata “può causare cicli o più percorsi a cascata”

Quindi ho provato ad aggiungere una cascata solo a insight_id e questo si traduce in:

“L’istruzione DELETE è in conflitto con il vincolo REFERENCE”

Qualche idea?

Grazie

Daniel

Dovrai implementarlo come INSTEAD OF delete trigger su insights, per farlo funzionare. Qualcosa di simile a:

 create trigger T_Insights_D on Insights instead of delete as set nocount on delete from broader_insights_insights where insight_id in (select ID from deleted) or broader_insight_id in (select ID from deleted) delete from Insights where ID in (select ID from deleted) 

Spesso con le eliminazioni a catena e molte chiavi esterne, è necessario dedicare del tempo a elaborare un ordine “a cascata” in modo che l’eliminazione che si verifica nella parte superiore di un “albero” venga trasferita correttamente alle tabelle di riferimento. Ma non è ansible in questo caso.