2012-01-31 49 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

相关问题