2012-01-31 71 views
7

我有一個表的主鍵「ID」字段在許多其他表中用作外鍵。如何檢查記錄的鍵是否在其他表中用作外鍵(sql)?

我怎麼能認識到這個表中的記錄(例如第一條記錄「ID = 1」)在其他表中使用?

我不想從所有其他表中選擇來理解它,因爲表是如此多的關係。我尋找一個解決方案,沒有工作解決方案,或者我錯了。請幫忙。

+2

你需要知道什麼?如果將記錄用作FK,不要刪除記錄?然後將其他表的外鍵設置爲「ON DELETE RESTRICT」而不是「CASCADE」。繁榮,不再有無意的刪除。 – 2012-01-31 17:32:31

+0

我有一個Isdeleted字段,如果任何其他記錄使用此記錄的ID作爲外鍵,但如果此記錄的ID未用作其他表作爲外鍵我想將其刪除,則使其爲真。 – ares 2012-01-31 17:55:22

+3

SQL服務器不支持ON DELETE RESTRICT,但可以使用ON DELETE NO ACTION獲取所需的行爲(如果嘗試刪除另一個表作爲FK使用的行,則會出現錯誤)。 – 2012-01-31 18:15:55

回答

2

需要加入所有其他表。像這樣:

select * 
from Parents 
where 
exists(select * from Children1 where ...) 
or exists(select * from Children2 where ...) 
or exists(select * from Children3 where ...) 

如果您所有的FK列都被索引,這將是非常有效的。你會得到很好的合併連接。

8

對於通用的方式使用這個,你將得到所有具有外鍵的表,然後你可以做一個循環來檢查列表中的所有表。這樣你可以添加外鍵,並且不需要更改代碼...

​​
+1

工程就像一個魅力! – 2014-01-03 12:34:22

+2

更簡單的代碼可能是:'select object_name(parent_object_id)* from sys.foreign_keys where referenced_object_id = object_id('dbo.TableName')' – 2014-05-06 05:07:48

相關問題