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

Objektet kunne ikke slippes, fordi det refereres til af en FOREIGN KEY-begrænsning - SQL Server / TSQL-vejledning, del 74

Scenarie:

Du arbejder som SQL Server DBA eller udvikler, Du skal droppe en tabel fra en database. Når du udfører drop-tabel SchemaName.TableName-sætning, får du nedenstående fejl.

Msg 3726, Level 16, State 1, Line 12
Kunne ikke slippe objektet 'SchemaName.TableName', fordi det er refereret af en FOREIGN KEY-begrænsning.

Nu ved vi, at tabellen er refereret af Foreign Key Constraint. Problemet er, hvordan man finder, hvilken tabel der har den fremmednøglebegrænsning, der refererer til denne tabel.

Løsning:

1) Der er mange måder at få disse oplysninger på. Vi kan bruge systemvisninger til at finde navnet på tabel, som har den fremmednøglebegrænsning, som refererer til vores primære 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'
 
Jeg udførte ovenstående script til min kundetabel, som er til stede i dbo-skemaet, og her er hvad jeg fik.
Sådan finder du hvilken tabels fremmednøgle, der refererer til tabel i SQL Server.


Nu ved vi, at Ord er den tabel, der har Foreign Key Constraint, som refererer til vores tabel. Vi kan gå videre og droppe den fremmede nøgle-begrænsning og derefter droppe vores tabel.

2) Brug System Stored Procedure sp_fkeys

Vi kan bruge System Stored Procedure til at få oplysninger om udenlandske nøglebegrænsninger, som refererer til vores tabel. Hvis mit tabelnavn er Kunde, kan jeg køre script som nedenfor
 
EXEC sp_fkeys 'Customer'
 
Sådan får du et navn på en fremmednøglebegrænsning til en tabel i SQL Server
 Sp_fkeys returnerer meget detaljeret information, få af kolonnerne er ikke vist i snapshot ovenfor. her er listen over kolonner, den vil returnere.


  • 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:Kunne ikke slippe objektet, fordi det refereres af en fremmednøglebegrænsning



  1. SQL Server 2005 - Eksporter tabel programmatisk (kør en .sql-fil for at genopbygge den)

  2. Kan ikke åbne databasetest anmodet af login. Login mislykkedes. Login mislykkedes for brugeren 'xyz\ASPNET'

  3. SQL-serveren svarende til GROUP_CONCAT()

  4. Hvordan taler Access med ODBC-datakilder? Del 1