我有一個表的主鍵「ID」字段在許多其他表中用作外鍵。如何檢查記錄的鍵是否在其他表中用作外鍵(sql)?
我怎麼能認識到這個表中的記錄(例如第一條記錄「ID = 1」)在其他表中使用?
我不想從所有其他表中選擇來理解它,因爲表是如此多的關係。我尋找一個解決方案,沒有工作解決方案,或者我錯了。請幫忙。
我有一個表的主鍵「ID」字段在許多其他表中用作外鍵。如何檢查記錄的鍵是否在其他表中用作外鍵(sql)?
我怎麼能認識到這個表中的記錄(例如第一條記錄「ID = 1」)在其他表中使用?
我不想從所有其他表中選擇來理解它,因爲表是如此多的關係。我尋找一個解決方案,沒有工作解決方案,或者我錯了。請幫忙。
你需要加入所有其他表。像這樣:
select *
from Parents
where
exists(select * from Children1 where ...)
or exists(select * from Children2 where ...)
or exists(select * from Children3 where ...)
如果您所有的FK列都被索引,這將是非常有效的。你會得到很好的合併連接。
對於通用的方式使用這個,你將得到所有具有外鍵的表,然後你可以做一個循環來檢查列表中的所有表。這樣你可以添加外鍵,並且不需要更改代碼...
工程就像一個魅力! – 2014-01-03 12:34:22
更簡單的代碼可能是:'select object_name(parent_object_id)* from sys.foreign_keys where referenced_object_id = object_id('dbo.TableName')' – 2014-05-06 05:07:48
你需要知道什麼?如果將記錄用作FK,不要刪除記錄?然後將其他表的外鍵設置爲「ON DELETE RESTRICT」而不是「CASCADE」。繁榮,不再有無意的刪除。 – 2012-01-31 17:32:31
我有一個Isdeleted字段,如果任何其他記錄使用此記錄的ID作爲外鍵,但如果此記錄的ID未用作其他表作爲外鍵我想將其刪除,則使其爲真。 – ares 2012-01-31 17:55:22
SQL服務器不支持ON DELETE RESTRICT,但可以使用ON DELETE NO ACTION獲取所需的行爲(如果嘗試刪除另一個表作爲FK使用的行,則會出現錯誤)。 – 2012-01-31 18:15:55