LÖSCHEN unter Verwendung von Inner join

Ich folgte, wie man ausführen löscht aus: Wie man mit INNER JOIN mit SQL server löschen ?

Die data, die ich löschen möchte:

select * from com.Address a inner join com.Contact as c on c.AddressId = a.AddressId inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId select from com.Contact c inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId 

Hier ist die Löschung, die ich ausführen möchte:

  delete a from com.Address a inner join com.Contact as c on c.AddressId = a.AddressId inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId delete c from com.Contact c inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId 

Allerdings, sobald ich sie ausführen, bekam ich einige Fremdschlüsselerrors:

Die DELETE-statement steht im Widerspruch zur REFERENCE-Einschränkung "FK_com.Contact_com.Address_AddressId". Der Konflikt trat in der database auf "", Tabelle "com.Contact", Spalte 'AddressId'.

Was gebe ich falsch? Ich habe sogar versucht, begin transaction und commit transaction .

was ist, wenn du es auf der anderen Weise machst:

 delete c from com.Contact c inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId delete a from com.Address a inner join com.Contact as c on c.AddressId = a.AddressId inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId 
  • Zuerst werden Sie die Informationen auf der Kontakttabelle als Fehler löschen
    sagt, dass Sie eine reference auf Kontakt für Adresse ID haben, deshalb können Sie die Adressentabelle nicht zuerst löschen

Wenn Sie Ihre Abfrage betrachten, wurden Ihre Beziehungen so konfiguriert, dass sie eine exception auslösen, wenn Sie versuchen, einen datasatz zu löschen, auf den der andere verweist. Wenn du es vermeiden willst, musst du wählen, wie solches Fall vom databaseserver behandelt werden soll. Dies wird auf den referenceeigenschaften aufgebaut. Wenn Sie SQL server Management Studio verwenden, dann:

  1. Klicken Sie mit der rechten Maustaste auf den Tisch. Wählen Sie 'Design'
  2. dann die Spalte, auf der du eine Relation definiert hast (sie wird als Zeilen angezeigt)
  3. dann rechte Maustaste klicken Sie auf die Spalte, die Sie interessiert sind, wählen Sie 'Beziehungen'
  4. dann im linken Bereich finden Sie Ihre Beziehung mit Namen, klicken Sie darauf
  5. dann in der rechten Scheibe, werden Sie Meer 'INSERT und UPDATE Specification' Gruppe, entfalten sie
  6. dann finden Sie zwei Regeln, eine für Update, eine für löschen, können Sie wählen:

    • Keine Aktion – wirft exceptionn wie in deinem Fall
    • Kaskade – löscht die referenzierenden Zeilen
    • Set Null – setzt null in die Zeilen, die diese Zeile durch FK-Werte referenzieren
    • Set Default – setzt den Standardwert für diese Spalte.

Wenn du keinen solchen Editor benutzt hast, kannst du das gleiche setzen, indem du nachher kommst

 REFERENCES TableName ColumnName 

Werte wie:

 ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }