Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да получите родителска таблица, референтна таблица, име на ограничение на външния ключ и колони в SQL Server - SQL Server / TSQL урок, част 71

Сценарий:

Вие работите като разработчик на 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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създайте изчислена колона, като използвате данни от друга таблица

  2. Актуализирайте SQL с последователно номериране

  3. Как да задам променлива от SQL заявка?

  4. Три лесни победи за производителност на SQL Server

  5. Как да премахнете всички първични ключове от всички таблици в базата данни на SQL Server - SQL Server / TSQL урок, част 65