Scenario:
U werkt als SQL Server-ontwikkelaar, u wordt gevraagd om de query op te geven die alle bovenliggende tabellen, referentietabellen, Foreign Key Constraints en Columns moet retourneren die worden gebruikt in de definitie van Foreign Key Constraint.Oplossing:
We kunnen de systeemweergaven gebruiken om deze informatie te verzamelen. In onze onderstaande query gebruiken we driesysteemweergaven
sys.foreign_keys
sys.foreign_key_columns
sys.columns
om te antwoorden de aanvraag. Omdat we samengestelde primaire-sleutelkolommen kunnen hebben die worden gebruikt in Foreign Key Constraint, heb ik FOR XML Path gebruikt om rijen in kolommen samen te voegen, zodat een lijst met kolommen in één rij kan worden weergegeven.
;With CTE_FK AS ( SELECT Schema_Name(Schema_id) as TableSchemaName, object_name(FK.parent_object_id) ParentTableName, object_name(FK.referenced_object_id) ReferenceTableName, FK.name AS ForeignKeyConstraintName,c.name as ReferencedColumnList, cf.name as ParentColumnName FROM sys.foreign_keys AS FK INNER JOIN sys.foreign_key_columns AS FKC ON FK.OBJECT_ID = FKC.constraint_object_id INNER JOIN sys.columns c on c.OBJECT_ID = FKC.referenced_object_id AND c.column_id = FKC.referenced_column_id INNER JOIN sys.columns cf on cf.OBJECT_ID = FKC.parent_object_id AND cf.column_id = FKC.parent_column_id ) Select TableSchemaName, ParentTableName, ReferenceTableName, ForeignKeyConstraintName,stuff(( Select ','+ParentColumnName from CTE_FK i where i.ForeignKeyConstraintName=o.ForeignKeyConstraintName and i.TableSchemaName=o.TableSchemaName and i.ParentTableName=o.ParentTableName and i.ReferenceTableName=o.ReferenceTableName for xml path('')), 1, 1, '') ParentColumnList ,stuff(( Select ','+ReferencedColumnList from CTE_FK i where i.ForeignKeyConstraintName=o.ForeignKeyConstraintName and i.TableSchemaName=o.TableSchemaName and i.ParentTableName=o.ParentTableName and i.ReferenceTableName=o.ReferenceTableName for xml path('')), 1, 1, '') RefColumnList from CTE_FK o group by tableSchemaName, ParentTableName, ReferenceTableName, ForeignKeyConstraintName
Ik heb bovenstaand script uitgevoerd in een van mijn databases en hier wordt uitgevoerd met Schemanaam, Naam bovenliggende tabel, Naam tabel waarnaar wordt verwezen, Naam externe sleutelbeperking, Lijst met bovenliggende kolommen en Lijst met referentiekolommen gebruikt in beperking.
br />
![]() |
Hoe bovenliggende tabel, tabel waarnaar wordt verwezen, naam buitenlandse sleutelbeperking, lijst met kolommen in SQL Server te krijgen |
Videodemo:Primaire sleuteltabel, buitenlandse sleuteltabel en beperkingsnaam in SQL Server verkrijgen