首页 > 解决方案 > 从链接到多个表的另一个表中的主键获取外键字段

问题描述

我的数据库是在 SQL Server 中设计的,我想在 asp.net、LINQ、C# 中获得输出

我有 2 个表链接到 1 个表 (1:1)

我的问题是我可以获得链接到哪个表的主键吗?

例如:

知道链接到哪个表ID的最佳方法是什么?tbl_Document

我可以将记录添加tbl_Document为“whichTable”并在每一列中写入表的名称,每次我想搜索设置“if”并检查“WhichTable”。

有没有更好的方法来做到这一点?

谢谢,对不起我的英语不好:)

标签: c#asp.netlinqsql-server-2014

解决方案


默认情况下,您只能获取对父表具有外键约束的所有表:

select  object_name(f.referenced_object_id) pk_table, c1.name pk_column_name,
  object_name(f.parent_object_id) fk_table, c2.name fk_column_name
from
sys.foreign_keys f
join sys.columns c1 on c1.object_id = f.referenced_object_id
join sys.columns c2 on c2.object_id = f.parent_object_id 
join sys.foreign_key_columns k 
  on (k.constraint_object_id = f.object_id 
    and c2.column_id = k.parent_column_id
    and c1.column_id = k.referenced_column_id )
where object_name(f.referenced_object_id) ='tbl_Document'

没有关于父表中每个特定行的此类附加信息。这将是重复的信息(因为您可以通过在每个子表中搜索来找出它)。因此,正如您所提到的,您可以将子表名存储在附加列中,然后作为选项,动态构造 sql 以查询子行。


推荐阅读