c# - 从链接到多个表的另一个表中的主键获取外键字段
问题描述
我的数据库是在 SQL Server 中设计的,我想在 asp.net、LINQ、C# 中获得输出
我有 2 个表链接到 1 个表 (1:1)
我的问题是我可以获得链接到哪个表的主键吗?
例如:
- tbl_Document(ID,日期,...)
- tbl_Factor (ID, DocID, ...)
- tbl_Finance (ID, DocID, ...)
知道链接到哪个表ID
的最佳方法是什么?tbl_Document
我可以将记录添加tbl_Document
为“whichTable”并在每一列中写入表的名称,每次我想搜索设置“if”并检查“WhichTable”。
有没有更好的方法来做到这一点?
谢谢,对不起我的英语不好:)
解决方案
默认情况下,您只能获取对父表具有外键约束的所有表:
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 以查询子行。
推荐阅读
- git - 有没有直接的方法来确定 Git 的 @{-N} 分支,而无需解析日志或静默运行结帐?
- android - 如何更改 RecyclerView 中项目的焦点?
- mapbox-gl-js - 如何在弹出窗口中更改属性“描述”?
- c++ - 如何在不超出限制的情况下“每周”或“每月”设置 tm 值
- html - CSS 下拉过渡
- swift - Swift 4 - GKMinmaxStrategist 修改实际游戏模型
- python - python中浮点精度的最佳实践
- java - 从“.bsh”脚本中的 ActionListener 调用“.bsh”脚本
- reactjs - 如何在剃须刀页面中加载 React 应用程序
- json - Kartik DetailView 中的 Kartik Editable 更新数据失败