【问题标题】:Determine SQL Server foreign key name确定 SQL Server 外键名称
【发布时间】:2026-01-24 07:15:01
【问题描述】:

我正在尝试确定表上外键的名称,但我得到了错误的值。如果我使用这个示例 SQL

CREATE TABLE Address 
(
    id INT NOT NULL PRIMARY KEY,
    street VARCHAR NOT NULL
);

CREATE TABLE Person 
(
    id INT NOT NULL PRIMARY KEY,
    orgId INT NOT NULL REFERENCES dbo.Organization (id)
);

SELECT tbl.name TableName, col.name ColumnName, fk.name ForeignKey
FROM sys.tables tbl
JOIN sys.columns col ON tbl.object_id = col.object_id
LEFT OUTER JOIN sys.foreign_keys fk ON tbl.object_id = fk.parent_object_id
WHERE tbl.name = 'Person'

它告诉我ForeignKey 名称对于Person 表的idorgId 列是相同的。显然我错过了一个额外的连接条件,但我一生都无法弄清楚它是什么。

【问题讨论】:

  • 能否将 tbl.object_id 和 tbl.schema_id 添加到选择列表中?

标签: sql-server foreign-keys database-schema


【解决方案1】:

您的查询缺少某些部分,要查看哪些列具有 FK,您可以使用 sys.foreign_key_columns 视图。 这是您需要的:

SELECT
    tbl.name   TableName
    , col.name ColumnName
    , fk2.name  ForeignKey
FROM
    sys.tables                              tbl
    JOIN sys.columns                        col
        ON tbl.object_id = col.object_id
    LEFT OUTER JOIN sys.foreign_key_columns AS fk
        ON col.object_id = fk.parent_object_id
           AND fk.parent_column_id = col.column_id
    LEFT OUTER JOIN sys.foreign_keys        AS fk2
        ON fk2.object_id = fk.constraint_object_id
WHERE
    tbl.name = 'Person';

【讨论】:

    最近更新 更多