2016-08-19 42 views

回答

1

該查詢列出了你,沒有一個外鍵

SELECT s.name [Schema], t.name [Table] 
FROM sys.tables AS t 
INNER JOIN sys.schemas AS s 
    ON t.[schema_id] = s.[schema_id] 
WHERE NOT EXISTS (SELECT 
    1 
FROM sys.foreign_keys AS fk 
WHERE fk.parent_object_id = t.[object_id]); 

這個邏輯是從張貼在this site一組相關查詢的啓發所有表。

+0

非常感謝!非常有用的網站,我一定會收藏它。 – JackTheRipper

0

這是使用EXCEPT的另一個選項。

select name 
from sys.tables 
except 
(
    select OBJECT_NAME(parent_object_id) 
    from sys.foreign_keys 
) 
order by name 
+0

這也適用。謝謝@Sean。 – JackTheRipper

+0

我注意到了一件事。如果您在多個模式中具有相同的名稱,這將無法正確識別表。如果其中一個表具有外鍵,另一個表則不會由此查詢返回。 –

+0

感謝您的通知。我正在使用一個模式,所以它現在工作。我將爲未來繼續這一想法。 – JackTheRipper