2011-01-14 5 views
2

Ich habe 2 Tabellen erstellen:Es kann keine FK Constraint

TableA 
------ 
TableAID INT IDENTITY Primary Key 
TableBID INT NULL 

I add a unique constraint on TableBID 
ALTER TABLE TableAID ADD CONSTRAINT xx UNIQUE ([TableBID]) 

TableB 
------ 
TableBID INT IDENTITY Primary Key 

Wenn ich jetzt TableA Zeile löschen, ich brauche TableB die ebenfalls gelöscht werden, so dass ich versuche, eine FK mit Kaskade hinzufügen löschen

ALTER TABLE TableB ADD CONSTRAINT yy FOREIGN KEY (TableBID) 
REFERENCES TableA (TABLEBID) ON DELETE CASCADE 

Aber ich bekomme diese Fehlermeldung:

Msg 1788, Level 16, State 0, Line 1 
Cascading foreign key 'yy' cannot be created where the referencing column 'TableB.TableBID' is an identity column. 

Antwort

9

TableB.TableBID können nicht gleichzeitig eine Identity-Spalte sein (die indep calcluated ist und gleichzeitig ein Fremdschlüssel aus einer Spalte in einer anderen Tabelle sein.

Ich glaube, Sie Ihre Beziehung haben umgekehrt, und eigentlich wollen:

ALTER TABLE TableA ADD CONSTRAINT yy FOREIGN KEY (TableBID) 
REFERENCES TableB (TABLEBID) ON DELETE CASCADE 
+0

gearbeitet Wenn ich die Tabellen der Fehler weg ging schaltet, aber sollte ich nicht die Beschränkung auf TableB werden, indem wie ich die TableB Zeile gelöscht werden sollen wenn TableA-Zeile gelöscht wird. – DotnetDude

+0

Es klingt als würdest du alles dann rückgängig machen wollen. TableB sollte eine Spalte haben, die den PK von TableA als Fremdschlüssel referenziert. –

0

Now when I delete TableA row, I need TableB's to be deleted as well, so i am trying to add a FK with cascade delete

Dieses Szenario erfordert, dass Sie die Beziehung in die andere Richtung zu schaffen. Erstellen Sie andernfalls einen Trigger in A, der den übereinstimmenden Datensatz in B entfernt, wenn A gelöscht wird.

When I switched the tables the error went away, but shouldn't I be adding the constraint on TableB as I want the TableB row to be deleted when TableA row is deleted.

Ein FK bedeutet, dass der Master B ist und eine oder mehr Datensätze in einer Link zu ihnen (in Ihrem Fall haben Sie es zu einem Eins-zu-eins mit dem eindeutigen Schlüssel beschränkt). Cascade delete entfernt den untergeordneten Teil des FK, wenn der Master entfernt wird, also lösche B -> entfernt übereinstimmendes A, nicht umgekehrt. Sie benötigen dazu einen Trigger.

-1

ich die Identität Spezifikation unter dem Tisch entfernt design..then es

Verwandte Themen