Сценарий:
Вие работите като разработчик на SQL Server, от вас се иска да предоставите заявката, която трябва да върне всички родителски таблици, референтни таблици, ограничения на външния ключ и колони, използвани в дефиницията на ограничение на външния ключ.Решение:
Можем да използваме системните изгледи, за да съберем тази информация. В нашата заявка по-долу ще използваме трисистемни изгледа
sys.foreign_keys
sys.foreign_key_columns
sys.columns
за да отговорим запитването. Тъй като можем да имаме съставни колони от първичен ключ, използвани в Ограничение на външния ключ, използвах FOR XML Path за свързване на редове в колона, така че мога да предоставя списък с колони в един ред.
;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
Изпълних горния скрипт в една от моята база данни и тук се извежда с име на схема, име на родителска таблица, име на препоръчана таблица, име на ограничение на външния ключ, списък на родителски колони и списък с референтни колони, използвани в ограничението.
Как да получите родителска таблица, таблица с препратки, име на ограничение на външния ключ, списък с колони в SQL Server |
Видео демонстрация:Как да получите таблица с първичен ключ, таблица с външни ключове и име на ограничение в SQL Server