2017-03-19 2 views
0

Hallo löschen Ich habe eine einfache Tabelle A und B,MSSQL Cascade Zwei Spalten mit FK einer Tabelle

Table A 
int Id NOT NULL 

Table B 
int Id NOT NULL 
int A1 NULL (FK to Table A.Id) 
int A2 NULL (FK to Table A.Id) 

Was Ich mag würde tun Datensatz aus Tabelle B zu löschen, wenn die Aufzeichnung bezogen (auf A1, A2 oder beide) wurde gelöscht.

Ich habe auf A1 Beziehung auf DELETE Aktion Cascade erstellt und es funktioniert perfekt, aber wenn ich versuche, auf A2 Beziehung auf DELETE Aktion Cascade einzurichten Ich habe:

‚A‘ Tabelle gespeichert erfolgreich 'B' Tabelle - Die Beziehung 'FK_B_A2' konnte nicht erstellt werden. Das Einführen der FOREIGN KEY-Einschränkung 'FK_B_A2' in Tabelle 'B' kann zu Zyklen oder mehreren Kaskaden Pfaden führen. Geben Sie ON DELETE NO ACTION oder ON UPDATE NO ACTION an, oder ändern Sie andere FOREIGN KEY-Einschränkungen. Constraint oder Index konnte nicht erstellt werden. Siehe vorherige Fehler.

Ich verstehe nicht, warum das nicht eingerichtet werden kann? Ich möchte einfach SQL MERGE in Tabelle A verwenden können (und wenn etwas gelöscht wird, möchte ich verwandte Datensätze in Tabelle B löschen oder die Zusammenführung schlägt fehl).

+0

Was Beziehung zwischen Tabellen? Tabelle B 'A1' und 'A2' Spalten sind mit Tabelle A' Id' Spalte verwandt? –

+0

Ja, ich werde meine Post aktualisieren, Spalten A1 und A2 hat FK zu Tabelle A – Teamol

Antwort

2

Sie können dieses Problem lösen, indem

1) Set Cascade auf A1 Löschen

2) statt Einstellung Cascade auf A2 Löschen erstellen Trigger- wie so:

CREATE TRIGGER [DELETE_B] 
    ON dbo.[A] 
    INSTEAD OF DELETE 
AS 
BEGIN 
SET NOCOUNT ON; 
DELETE FROM [B] WHERE A2 IN (SELECT Id FROM DELETED) 
DELETE FROM [A] WHERE Id IN (SELECT Id FROM DELETED) 
END 
Verwandte Themen