Scenario:
Du arbetar som SQL Server-utvecklare, du ombeds att tillhandahålla frågan som ska returnera alla överordnade tabeller, referenstabeller, Foreign Key Constraints och Kolumner som används i Foreign Key Constraint definition.Lösning:
Vi kan använda systemvyerna för att samla in denna information. I vår fråga nedan kommer vi att använda tresystemvyer
sys.foreign_keys
sys.foreign_key_columns
sys.columns
för att svara förfrågan. Eftersom vi kan ha sammansatta primärnyckelkolumner som används i Foreign Key Constraint, har jag använt FOR XML Path för att sammanfoga rader till kolumner så att vi kan tillhandahålla en lista över kolumner i en rad.
;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
Jag körde ovanstående skript på en av mina databaser och här är utdata med Schema Name, Parent Table Name, Refered Tabell Name, Foreign Key Constraint Name, Parent Column List och Reference Column List som används i Constraint.
Hur får man överordnad tabell, refererad tabell, namn på främmande nyckelbegränsningar, kolumnlista i SQL Server |
Videodemo :Hur man får primärnyckeltabell, främmande nyckeltabell och begränsningsnamn i SQL Server