从链接到许多表的另一个表中的主键获取外键字段

时间:2018-05-08 09:59:24

标签: c# asp.net linq sql-server-2014

我的数据库是在SQL Server&我想在asp.net,LINQ,C#

中获取输出

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

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

例如:

  • tbl_Document(ID,Date,...)
  • tbl_Factor(ID,DocID,...)
  • tbl_Finance(ID,DocID,...)

了解ID中与哪个表关联的tbl_Document的最佳方法是什么?

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

有更好的方法吗?

谢谢,抱歉我的英语不好:)

1 个答案:

答案 0 :(得分:0)

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

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以查询子行。