Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Das Objekt konnte nicht gelöscht werden, da es von einer FOREIGN KEY-Einschränkung referenziert wird – SQL Server / TSQL-Tutorial Teil 74

Szenario:

Sie arbeiten als SQL Server-DBA oder -Entwickler und müssen eine Tabelle aus einer Datenbank löschen. Wenn Sie die Anweisung SchemaName.TableName zum Löschen der Tabelle ausführen, erhalten Sie den folgenden Fehler.

Msg 3726, Level 16, State 1, Line 12
Objekt 'SchemaName.TableName' konnte nicht gelöscht werden, weil es so ist referenziert durch eine FOREIGN KEY-Einschränkung.

Nun wissen wir, dass die Tabelle durch eine Foreign Key-Einschränkung referenziert wird. Das Problem besteht darin, herauszufinden, welche Tabelle diese Foreign Key Constraint hat, die auf diese Tabelle verweist.

Lösung:

1) Es gibt viele Möglichkeiten, diese Informationen zu erhalten. Wir können Systemansichten verwenden, um den Namen der Tabelle zu finden, die die Foreign Key Constraint hat, die auf unsere Primärtabelle verweist.

SELECT Schema_Name(Schema_id) as TableSchemaName,
  object_name(FK.parent_object_id) ParentTableName,
  object_name(FK.referenced_object_id) ReferenceTableName
       FROM sys.foreign_keys AS FK
       WHERE object_name(FK.referenced_object_id)='YourTableName'
       and Schema_Name(Schema_id)='YourTableSchemaName'
 
Ich habe das obige Skript für meine Kundentabelle ausgeführt, die im dbo-Schema vorhanden ist, und hier ist, was ich bekommen habe.
Wie man herausfindet, welcher Fremdschlüssel auf die Tabelle in SQL Server verweist.


Jetzt wissen wir, dass Ord die Tabelle ist, die die Foreign Key Constraint hat, die auf unsere Tabelle verweist. Wir können fortfahren und die Fremdschlüsselbeschränkung löschen und dann unsere Tabelle löschen.

2) Verwenden Sie die gespeicherte Systemprozedur sp_fkeys

Wir können die gespeicherte Systemprozedur verwenden, um die Informationen zu Foreign Key Constraints zu erhalten, die auf unsere Tabelle verweisen. Wenn mein Tabellenname Kunde ist, kann ich das Skript wie folgt ausführen
 
EXEC sp_fkeys 'Customer'
 
So erhalten Sie den Namen der Fremdschlüsselbeschränkung für eine Tabelle in SQL Server
 Die sp_fkeys geben sehr detaillierte Informationen zurück, einige der Spalten werden im obigen Schnappschuss nicht angezeigt. Hier ist die Liste der zurückgegebenen Spalten.


  • PKTABLE_QUALIFIER
  • PKTABLE_OWNER
  • PKTABLE_NAME
  • PKCOLUMN_NAME
  • FKTABLE_QUALIFIER
  • FKTABLE_OWNER
  • FKTABLE_NAME
  • FKCOLUMN_NAME
  • KEY_SEQ
  • UPDATE_RULE
  • DELETE_RULE
  • FK_NAME
  • PK_NAME


Videodemo:Objekt konnte nicht gelöscht werden, da es von einer Fremdschlüsseleinschränkung referenziert wird