Scenarie:
Du arbejder som SQL Server-udvikler. Du bliver bedt om at angive forespørgslen, der skal returnere alle de overordnede tabeller, referencetabeller, Foreign Key Constraints og Columns brugt i Foreign Key Constraint definition.Løsning:
Vi kan bruge systemvisningerne til at indsamle disse oplysninger. I vores forespørgsel nedenfor vil vi bruge tresystemvisninger
sys.foreign_keys
sys.foreign_key_columns
sys.columns
til at svare forspørgelsen. Da vi kan have sammensatte primærnøglekolonner brugt i Foreign Key Constraint, har jeg brugt FOR XML Path til at sammenkæde rækker i kolonne, så jeg kan give en liste over kolonner i en enkelt række.
;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
Jeg udførte ovenstående script på en af mine databaser, og her er output med skemanavn, overordnet tabelnavn, referencetabelnavn, navn på fremmednøglebegrænsning, overordnet kolonneliste og referencekolonneliste brugt i begrænsning.
Sådan får du overordnet tabel, referencetabel, navn på fremmednøglebegrænsning, kolonneliste i SQL Server |
Videodemo:Sådan får du primær nøgletabel, udenlandsk nøgletabel og begrænsningsnavn i SQL Server