Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Impossibile eliminare l'oggetto perché è referenziato da un vincolo FOREIGN KEY - Tutorial SQL Server / TSQL Parte 74

Scenario:

Stai lavorando come DBA o sviluppatore di SQL Server, devi eliminare una tabella da un database. Quando si esegue l'istruzione SchemaName.TableName della tabella di rilascio, viene visualizzato un errore inferiore.

Msg 3726, livello 16, stato 1, riga 12
Impossibile eliminare l'oggetto 'SchemaName.TableName' perché è a cui fa riferimento un vincolo FOREIGN KEY.

Ora sappiamo che la tabella è referenziata dal vincolo di chiave esterna. Il problema è come trovare quale tabella ha quel vincolo di chiave esterna che fa riferimento a questa tabella.

Soluzione:

1) Ci sono molti modi per ottenere queste informazioni. Possiamo utilizzare le viste di sistema per trovare il nome della tabella che ha il vincolo di chiave esterna che fa riferimento alla nostra tabella primaria.

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'
 
Ho eseguito lo script sopra per la tabella del mio cliente che è presente nello schema dbo ed ecco cosa ho ottenuto.
Come trovare la chiave esterna di quale tabella fa riferimento a Table in SQL Server.


Ora sappiamo che Ord è la tabella che ha il Foreign Key Constraint che fa riferimento alla nostra tabella. Possiamo andare avanti e rilasciare il vincolo della chiave esterna e quindi rilasciare la nostra tabella.

2) Utilizzare la procedura archiviata di sistema sp_fkeys

Possiamo utilizzare la procedura memorizzata di sistema per ottenere le informazioni sui vincoli di chiave esterna che fanno riferimento alla nostra tabella. Se il nome della mia tabella è Cliente, posso eseguire lo script come di seguito
 
EXEC sp_fkeys 'Customer'
 
Come ottenere il nome del vincolo di chiave esterna per una tabella in SQL Server
 Sp_fkeys restituisce informazioni molto dettagliate, alcune delle colonne non vengono visualizzate nell'istantanea sopra. ecco l'elenco delle colonne che restituirà.


  • QUALIFICATORE_PKTABLE
  • PKTABLE_OWNER
  • PKTABLE_NAME
  • PKCOLUMN_NAME
  • QUALIFICATORE_FKTABLE
  • FKTABLE_OWNER
  • FKTABLE_NAME
  • FKCOLUMN_NAME
  • SEQ_KEY
  • REGOLA_AGGIORNAMENTO
  • DELETE_RULE
  • NOME_FK
  • NOME_PK


Video demo:impossibile rilasciare l'oggetto perché è referenziato da un vincolo di chiave esterna