Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como obter a tabela pai, a tabela de referência, o nome da restrição de chave estrangeira e as colunas no SQL Server - SQL Server / TSQL Tutorial Part 71

Cenário:

Você está trabalhando como SQL Server Developer, você é solicitado a fornecer a consulta que deve retornar todas as tabelas pai, tabelas de referência, restrições de chave estrangeira e colunas usadas na definição de restrição de chave estrangeira.

Solução:

Podemos usar as visualizações do sistema para coletar essas informações. Em nossa consulta abaixo, usaremos três

visualizações do sistema
sys.foreign_keys
sys.foreign_key_columns
sys.columns

para responder o pedido. Como podemos ter colunas de chave primária compostas usadas na Restrição de Chave Estrangeira, usei FOR XML Path para concatenar linhas em coluna para fornecer uma lista de colunas em uma única linha.

;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


Eu executei o script acima em um dos meus bancos de dados e aqui está a saída com Nome do Esquema, Nome da Tabela Pai, Nome da Tabela Referenciada, Nome da Restrição de Chave Estrangeira, Lista de Colunas Pai e Lista de Colunas de Referência usadas na Restrição.
Como obter tabela pai, tabela referenciada, nome de restrição de chave estrangeira, lista de colunas no SQL Server


Demonstração em vídeo:como obter tabela de chave primária, tabela de chave estrangeira e nome de restrição no SQL Server