查找数据库中所有没有外键的表

xam*_*mir 4 foreign-key sql-server metadata

在 SQL Server 中,我们如何找到所有没有以下任一项的表:

  • 外键约束
  • 其他表的外键引用

小智 12

SwapnilBhate 的回答将返回由外键引用的表。添加进一步LEFT JOIN将排除这些:

SELECT tbl.name 
FROM sys.tables AS tbl
    LEFT JOIN sys.foreign_key_columns AS fKey 
        ON tbl.object_id = fKey.parent_object_id
    LEFT JOIN sys.foreign_key_columns AS rKey 
        ON tbl.object_id = rKey.referenced_object_id
WHERE fKey.parent_object_id IS NULL 
    AND rKey.referenced_object_id IS NULL;
Run Code Online (Sandbox Code Playgroud)


Swa*_*ate 5

您可以使用该sp_fkeys过程来获取逻辑外键信息。但限制是您必须通过将表名作为输入参数来执行。更多信息可以在下面的 MSDN 库中找到。

sp_fkeys

或者,您可以使用以下查询从 sys.tables 获取所有表,并检查 sys.foreign_key_columns 中是否存在相同的表 object_id。

SELECT tbl.name
FROM sys.tables AS tbl
    LEFT JOIN sys.foreign_key_columns AS fKey
    ON tbl.object_id = fKey.parent_object_id
WHERE fKey.parent_object_id IS NULL
Run Code Online (Sandbox Code Playgroud)