Scenario:
Du arbetar som SQL Server DBA eller utvecklare. Du måste släppa en tabell från en databas. När du kör drop-tabell SchemaName.TableName-satsen får du nedan fel.Msg 3726, Level 16, State 1, Rad 12
Kunde inte släppa objektet 'SchemaName.TableName' eftersom det är refereras av en FOREIGN KEY-begränsning.
Nu vet vi att tabellen refereras av Foreign Key Constraint. Problemet är hur man hittar vilken tabell som har den främmande nyckelbegränsningen som hänvisar till den här tabellen.
Lösning:
1) Det finns många sätt att få denna information. Vi kan använda systemvyer för att hitta namnet på tabellen som har den främmande nyckelbegränsningen som refererar till vår primära tabell.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'
Jag körde skriptet ovan för min kundtabell som finns i dbo-schemat och här är vad jag fick.
Hur du hittar vilken tabells främmande nyckel som refererar till Tabell i SQL Server. |
Nu vet vi att Ord är tabellen som har Foreign Key Constraint som refererar till vår tabell. Vi kan gå vidare och släppa den främmande nyckelbegränsningen och sedan släppa vår tabell.
2) Använd systemlagrad procedur sp_fkeys
Vi kan använda systemets lagrade procedur för att få information om främmande nyckelbegränsningar som hänvisar till vår tabell. Om mitt tabellnamn är Kund kan jag köra skript enligt nedan
EXEC sp_fkeys 'Customer'
Hur får man namn på en utländsk nyckel för en tabell i SQL Server |
Sp_fkeys returnerar mycket detaljerad information, några av kolumnerna visas inte i ögonblicksbilden ovan. här är listan över kolumner som den kommer att returnera.
- 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 :Kunde inte släppa objekt eftersom det refereras av en främmande nyckelbegränsning