sql >> Database >  >> RDS >> Sqlserver

Kan object niet neerzetten omdat ernaar wordt verwezen door een FOREIGN KEY-beperking - SQL Server / TSQL-zelfstudie, deel 74

Scenario:

U werkt als SQL Server DBA of ontwikkelaar, u moet een tabel uit een database laten vallen. Wanneer u de instructie Drop Table SchemaName.TableName uitvoert, krijgt u onderstaande fout.

Msg 3726, Level 16, State 1, Line 12
Kon object 'SchemaName.TableName' niet neerzetten omdat het waarnaar wordt verwezen door een FOREIGN KEY-beperking.

Nu weten we dat naar de tabel wordt verwezen door een Foreign Key Constraint. Het probleem is hoe je kunt vinden welke tabel die Foreign Key Constraint heeft die naar deze tabel verwijst.

Oplossing:

1) Er zijn veel manieren om aan deze informatie te komen. We kunnen systeemweergaven gebruiken om de naam te vinden van de tabel met de Foreign Key Constraint die verwijst naar onze primaire tabel.

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'
 
Ik heb bovenstaand script uitgevoerd voor mijn klantentabel die aanwezig is in het dbo-schema en dit is wat ik heb gekregen.
Hoe de externe sleutel van een tabel te vinden die verwijst naar de tabel in SQL Server.


Nu weten we dat Ord de tabel is met de Foreign Key Constraint die verwijst naar onze tabel. We kunnen doorgaan en de Foreign key Constraint laten vallen en dan onze tabel laten vallen.

2) Gebruik de door het systeem opgeslagen procedure sp_fkeys

We kunnen de systeem Stored Procedure gebruiken om de Foreign Key Constraints-informatie te krijgen die naar onze tabel verwijst. Als mijn tabelnaam Klant is, kan ik het onderstaande script uitvoeren
 
EXEC sp_fkeys 'Customer'
 
Hoe de naam van een Foreign Key Constraint voor een tabel in SQL Server te krijgen
 De sp_fkeys retourneert zeer gedetailleerde informatie, enkele kolommen worden niet getoond in de bovenstaande snapshot. hier is de lijst met kolommen die het zal retourneren.


  • 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:object kan niet worden verwijderd omdat ernaar wordt verwezen door een externe sleutelbeperking



  1. mysql-achtige prestatieverbetering

  2. Fout krijgen tijdens het uitvoeren van pakket

  3. PostgreSQL-index op JSON

  4. Hoe TRUNCATE() werkt in MariaDB