确定 SQL 服务器外键名称

Determine SQL Server foreign key name

我正在尝试确定 table 上的外键名称,但我得到了错误的值。如果我使用这个例子 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 table 的 idorgId 列是相同的。显然我缺少一个额外的连接条件,但我终究无法弄清楚它是什么。

您的查询缺少某些部分,要查看哪些列有 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';