SQL Server:引用表的报告&外键

时间:2013-01-15 02:18:51

标签: sql-server documentation foreign-keys redgate

我想生成一个显示数据库中所有表的报告。对于每个表,报告将记录它引用的表以及引用它的表。还包括用于引用的外键。

我之前尝试过使用Red Gate SQL Dependency Tracker,它给了我一个易于阅读,易于使用的报告 - 缺少的只是每个表关联的外键。

如果有人可以成为一个很好的替代软件,可以做我想做的事情,或提供某种形式的替代方法,我将非常感激!我的主要目的实际上是为客户提供某种形式的可读模式,以便客户能够理解数据库中的互连...我尝试过使用数据库图表,但这是不可取的,因为可读性。

谢谢!

5 个答案:

答案 0 :(得分:1)

我使用此脚本查询某些系统目录视图

SELECT 
    fk.name 'FK Name',
    tpar.name 'Parent Table',
    colpar.name 'Parent Column',
    tref.name 'Referenced Table',
    colref.name 'Referenced Column',
    fk.delete_referential_action_desc 'Delete Action',
    fk.update_referential_action_desc 'Update Action'
FROM
    sys.foreign_keys fk
INNER JOIN 
    sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id
INNER JOIN 
    sys.tables tpar ON fk.parent_object_id = tpar.object_id
INNER JOIN 
    sys.columns colpar ON fkc.parent_object_id = colpar.object_id AND fkc.parent_column_id = colpar.column_id
INNER JOIN 
    sys.tables tref ON fk.referenced_object_id = tref.object_id
INNER JOIN 
    sys.columns colref ON fkc.referenced_object_id = colref.object_id AND fkc.referenced_column_id = colref.column_id

它产生的输出类似于:

FK Name   Parent Table   Parent Column   Referenced Table   Referenced Column   Delete Action   Update Action

对我来说效果很好。随意适应您自己的需求。

答案 1 :(得分:1)

默认情况下,依赖关系跟踪器不会显示外键,但如果单击“将约束显示为对象”按钮,它就会显示。

答案 2 :(得分:0)

sp_help <table_name>输出表引用的外键以及将其列作为外键引用的表。查询sys.tables并使用sp_help应该会为您提供所需的所有信息。

答案 3 :(得分:0)

你试过ApexSQL Clean吗?它可以选择直观地显示所有参考,挖掘所有关系等......

如果您的目标是仅创建显示所有数据的文档,您应该查看某些文档工具,并且其中有很多这些工具。我正在使用ApexSQL Doc,但我想你不会错过任何其他大型供应商提供的其他流行工具。

答案 4 :(得分:0)

我在一天结束时使用了Toad for SQL Server。虽然数据库文档可能实际上不是一般标准,但它比Red Gate更加可定制。使用报告生成器,我能够为每个外键以及它们引用的列提供依赖关系......

非常感谢你的所有答案,他们为我提供了宝贵的见解。