在 SQL Server 中,可以通过查询系统视图来查看数据库中所有表的外键信息。以下是一个完整的 T-SQL 语句示例,用于列出所有表的外键、外键列以及相关的父表和引用表信息。

查询所有表的外键信息

SELECT 
    fk.name AS ForeignKeyName,
    tp.name AS ParentTableName,
    cp.name AS ParentColumnName,
    tr.name AS ReferencedTableName,
    cr.name AS ReferencedColumnName
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.tables AS tp ON fk.parent_object_id = tp.object_id
INNER JOIN 
    sys.columns AS cp ON fkc.parent_column_id = cp.column_id AND fkc.parent_object_id = cp.object_id
INNER JOIN 
    sys.tables AS tr ON fk.referenced_object_id = tr.object_id
INNER JOIN 
    sys.columns AS cr ON fkc.referenced_column_id = cr.column_id AND fkc.referenced_object_id = cr.object_id
ORDER BY 
    ParentTableName, ForeignKeyName;

详细解释

  • sys.foreign_keys: 此系统视图包含数据库中所有外键的信息。name 是外键的名称,parent_object_id 是父表的对象 ID,referenced_object_id 是引用表的对象 ID。
  • sys.foreign_key_columns: 此视图包含外键约束中涉及的列的映射。constraint_object_id 是外键的对象 ID,parent_column_id 是父表列的 ID,referenced_column_id 是引用表列的 ID。
  • sys.tables: 此视图包含数据库中所有表的信息。通过 object_id 可以与外键信息关联,以获取表名。
  • sys.columns: 此视图包含表中所有列的信息。通过 column_idobject_id 可以与外键列信息关联,获取具体的列名。

结果示例

执行上述查询后,您将得到类似以下的结果:

ForeignKeyName

ParentTableName

ParentColumnName

ReferencedTableName

ReferencedColumnName

FK_Order_Customer

Orders

CustomerID

Customers

ID

FK_OrderDetails_Order

OrderDetails

OrderID

Orders

ID

FK_Product_Category

Products

CategoryID

Categories

ID

小结

通过以上查询,您可以轻松查看 SQL Server 数据库中所有表的外键信息。这对于了解数据库结构、维护数据完整性以及调试外键约束问题非常有用。