在 SQL Server 中,查看所有表的外键可以通过查询系统视图来实现。以下是几种常用的查询方法,帮助你获取有关外键的详细信息:

1. 使用 sys.foreign_keyssys.tables

sys.foreign_keys 视图包含了所有外键的信息,而 sys.tables 视图包含了表的信息。你可以通过联接这些视图来获取每个表的外键信息。

示例查询:获取所有表的外键信息
SELECT 
    fk.name AS ForeignKeyName,
    tp.name AS PrimaryTable,
    ref.name AS ReferencedTable,
    cp.name AS PrimaryKeyColumn,
    cr.name AS ForeignKeyColumn
FROM 
    sys.foreign_keys AS fk
INNER JOIN 
    sys.tables AS tp ON fk.referenced_object_id = tp.object_id
INNER JOIN 
    sys.tables AS ref ON fk.parent_object_id = ref.object_id
INNER JOIN 
    sys.foreign_key_columns AS fkc ON fk.object_id = fkc.constraint_object_id
INNER JOIN 
    sys.columns AS cp ON fkc.referenced_column_id = cp.column_id 
        AND fkc.referenced_object_id = cp.object_id
INNER JOIN 
    sys.columns AS cr ON fkc.parent_column_id = cr.column_id
        AND fkc.parent_object_id = cr.object_id
ORDER BY 
    fk.name, tp.name, ref.name;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • ForeignKeyName: 外键的名称。
  • PrimaryTable: 被引用的主表名称。
  • ReferencedTable: 具有外键的表名称。
  • PrimaryKeyColumn: 主表中被引用的列。
  • ForeignKeyColumn: 外键表中引用的列。
2. 使用 INFORMATION_SCHEMA 视图

INFORMATION_SCHEMA 提供了一组标准视图,可以用来查询数据库中的元数据,包括外键信息。

示例查询:获取所有表的外键信息
SELECT
    fk.CONSTRAINT_NAME AS ForeignKeyName,
    fk.TABLE_NAME AS ForeignTable,
    fk.COLUMN_NAME AS ForeignColumn,
    pk.TABLE_NAME AS PrimaryTable,
    pk.COLUMN_NAME AS PrimaryColumn
FROM
    INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS rc
INNER JOIN
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS fk ON rc.CONSTRAINT_NAME = fk.CONSTRAINT_NAME
INNER JOIN
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS pk ON rc.UNIQUE_CONSTRAINT_NAME = pk.CONSTRAINT_NAME
WHERE
    fk.ORDINAL_POSITION = pk.ORDINAL_POSITION
ORDER BY
    fk.TABLE_NAME, fk.COLUMN_NAME;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • ForeignKeyName: 外键的名称。
  • ForeignTable: 具有外键的表名称。
  • ForeignColumn: 外键表中引用的列。
  • PrimaryTable: 被引用的主表名称。
  • PrimaryColumn: 主表中被引用的列。
3. 使用 sys.key_constraintssys.foreign_key_columns

sys.key_constraints 包含主键和外键的定义,sys.foreign_key_columns 列出外键列的详细信息。

示例查询:获取所有外键及其列的详细信息
SELECT 
    fk.name AS ForeignKeyName,
    tp.name AS PrimaryTable,
    ref.name AS ForeignTable,
    cp.name AS PrimaryKeyColumn,
    cr.name AS ForeignKeyColumn
FROM 
    sys.foreign_keys AS fk
INNER JOIN 
    sys.tables AS tp ON fk.referenced_object_id = tp.object_id
INNER JOIN 
    sys.tables AS ref ON fk.parent_object_id = ref.object_id
INNER JOIN 
    sys.foreign_key_columns AS fkc ON fk.object_id = fkc.constraint_object_id
INNER JOIN 
    sys.columns AS cp ON fkc.referenced_column_id = cp.column_id
        AND fkc.referenced_object_id = cp.object_id
INNER JOIN 
    sys.columns AS cr ON fkc.parent_column_id = cr.column_id
        AND fkc.parent_object_id = cr.object_id
ORDER BY 
    fk.name, ref.name;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • ForeignKeyName: 外键的名称。
  • PrimaryTable: 主表名称。
  • ForeignTable: 外键表名称。
  • PrimaryKeyColumn: 主表中的列。
  • ForeignKeyColumn: 外键表中的列。
小结

以上查询方法可以帮助你获取 SQL Server 数据库中所有表的外键信息。你可以根据实际需求选择合适的视图和查询方式来获取所需的外键数据。使用这些查询可以帮助你更好地理解数据库的结构和表之间的关系。