【问题标题】:How to know which columns correspond between tables and a view如何知道表和视图之间对应的列
【发布时间】:2013-03-07 12:26:57
【问题描述】:

我在 SQL Server 中有一个视图,并希望通过我的 C# 应用程序将此视图与其他表连接起来。为此,我需要在基础表中找出各个视图的字段对应的列。例如,我可以有这样的视图:

CREATE VIEW [View A]     
AS   
   SELECT Children.Child_ID, Social_Workers.Social_ID 
   FROM Children 
   INNER JOIN Social_Workers 
     ON Children.Social_ID = Social_Workers.Social_ID

我可能想将一个表加入到上面的视图中。为此,我的 C# 应用程序必须以某种方式知道关系中所需的外键和主键字段,从而生成如下 SQL 代码:

SELECT [View A].Child_ID, 
       Sponsors.User_ID 
FROM  [View A]  
INNER JOIN Sponsors 
 ON [View A].Child_ID = Sponsors.Child_ID

我有found a way 来检索视图中的基础表,但是我不确定如何解决剩下的问题。

【问题讨论】:

  • 您能描述一下您要运行的查询吗?视图中的字段名称看起来很清晰。
  • @GordonLinoff - 我的 C# 应用程序如何知道视图中的哪些列是关系的对应列?视图可以具有与其在实际表中的实际 FK 和 PK 对应项不同的列名。
  • 在您给出的视图示例中,视图中的列名与基础表中的相同。另外,我不明白你想做什么。如果您需要有关孩子的信息,请使用child_id。如果您需要有关社工的信息,请使用social_id
  • 您想根据现有的 FK 动态创建与 View 的联接,但 View 中的列名可能与 FK 中的列名不同?
  • 准确地说是@DanilaPolevshikov。

标签: c# .net sql sql-server database


【解决方案1】:

我认为以下内容可能会有所帮助,特别是 referenced_entity_name 和 referenced_minor_name 列。

select * from sys.dm_sql_referenced_entities( 'dbo.ViewA', 'object' ) ;

此 DMV 是在 SQL Server 2008 中添加的,因此如果您有较早的版本,对不起。

【讨论】:

    【解决方案2】:

    如果我正确理解您的要求,您可以尝试使用来自Find the real column name of an alias used in a view? 的查询

    【讨论】:

    • 不幸的是,该已接受答案中的代码示例存在缺陷,并且根据 cmets 始终无法正常工作。
    • 另一个答案是“我认为你不能”。可能对视图列名使用命名约定会有帮助吗?
    • 不幸的是,该应用程序可以与用户选择的任何视图一起使用,所以我不能真正施加限制:/
    猜你喜欢
    • 2016-05-26
    • 1970-01-01
    • 2019-09-05
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多