sql >> Databasteknik >  >> RDS >> Sqlserver

Det gick inte att släppa objektet eftersom det refereras av en FOREIGN KEY-begränsning - SQL Server / TSQL Tutorial Del 74

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



  1. Postgres tips och tricks

  2. Kopiera en tabell (inklusive index) i postgres

  3. Hur man hittar platsen för datafiler och loggfiler i SQL Server

  4. MariaDB USER() Förklarat