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êsvisualizaçõ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