如何检查记录的键是否在其他表中用作外键(sql)?

are*_*res 9 sql sql-server sql-server-2008

我有一个表,其主键"ID"字段在许多其他表中用作外键.

如何才能意识到该表中的记录(例如第一个记录"ID = 1")在其他表中使用?

我不想从所有其他表中选择来理解它因为表是如此之多和关系.我搜索了一个解决方案,没有可行的解决方案,或者我弄错了.请帮忙.

Die*_*ira 8

对于通用方式使用此方法,您将获得具有外键的所有表,然后您可以循环检查列表中的所有表.这样你可以添加外键,不需要改变代码......

SELECT 
sys.sysobjects.name,
sys.foreign_keys.*
FROM 
sys.foreign_keys 
inner join sys.sysobjects on
    sys.foreign_keys.parent_object_id = sys.sysobjects.id
WHERE 
referenced_object_id = OBJECT_ID(N'[dbo].[TableName]') 
Run Code Online (Sandbox Code Playgroud)

  • 更简单的代码可能是:`select object_name(parent_object_id)*来自sys.foreign_keys,其中referenced_object_id = object_id('dbo.TableName')` (2认同)

usr*_*usr 3

需要加入所有其他表。像这样:

select *
from Parents
where
 exists(select * from Children1 where ...)
 or exists(select * from Children2 where ...)
 or exists(select * from Children3 where ...)
Run Code Online (Sandbox Code Playgroud)

如果所有 FK 列都建立了索引,这将非常高效。你会得到很好的合并连接。