Sql-Server

查找數據庫中所有沒有外鍵的表

  • September 18, 2020

在 SQL Server 中,我們如何找到所有不包含以下任何一項的表:

  • 外鍵約束
  • 其他表的外鍵引用

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;

您可以使用該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

引用自:https://dba.stackexchange.com/questions/156359