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