You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用非存储过程的SQL Server查询列出指定表的所有外键及关联信息?

纯SQL Server查询获取外键及关联列属性

当然可以用非存储过程的纯SQL语句实现!我之前也碰到过sp_fkeys返回结果不全的坑,下面这个查询直接读取SQL Server的系统目录视图,能精准返回你需要的所有信息:

SELECT
    -- 1. 当前表的外键名称
    fk.name AS ForeignKeyName,
    -- 2. 外键引用的外部表名称
    referenced_table.name AS ReferencedTableName,
    -- 3. 外键引用的外部列名称
    referenced_column.name AS ReferencedColumnName,
    -- 4. 外部列的属性:类型、长度/精度、小数位数
    type.name AS ColumnDataType,
    CASE 
        WHEN type.name IN ('char', 'varchar', 'nchar', 'nvarchar') THEN referenced_column.max_length
        WHEN type.name IN ('decimal', 'numeric') THEN referenced_column.precision
        ELSE NULL
    END AS ColumnSizeOrPrecision,
    CASE 
        WHEN type.name IN ('decimal', 'numeric') THEN referenced_column.scale
        ELSE NULL
    END AS ColumnScale
FROM
    sys.foreign_keys fk
INNER JOIN
    sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
INNER JOIN
    sys.tables referenced_table ON fkc.referenced_object_id = referenced_table.object_id
INNER JOIN
    sys.columns referenced_column ON fkc.referenced_object_id = referenced_column.object_id 
                                AND fkc.referenced_column_id = referenced_column.column_id
INNER JOIN
    sys.types type ON referenced_column.system_type_id = type.system_type_id
WHERE
    -- 替换为你要查询的目标表(支持跨数据库,格式:数据库名.架构名.表名)
    fk.parent_object_id = OBJECT_ID('Database1.dbo.TableName1');

额外说明:

  • 记得把Database1.dbo.TableName1替换成你实际的表名,如果表在当前默认数据库,也可以简化为TableName1,但带上数据库和架构名能避免歧义
  • 这个查询不会出现sp_fkeys漏列的问题,因为它直接从系统核心视图取数,没有存储过程额外的过滤逻辑
  • 如果需要同时显示当前表的外键列名称,可以在SELECT里添加parent_column.name AS ForeignKeyColumnName,并在JOIN部分追加:
    INNER JOIN
        sys.columns parent_column ON fkc.parent_object_id = parent_column.object_id 
                                AND fkc.parent_column_id = parent_column.column_id
    

内容的提问来源于stack exchange,提问作者user366312

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:56:10