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