【问题标题】:Use TSql to find the original table that a column within a view came from使用 TSql 查找视图中的列来自的原始表
【发布时间】:2017-04-08 01:25:04
【问题描述】:

如果我创建一个视图,例如:

create view View1 as
select Table1.Column1 from Table1

有没有一种方法可以找到仅给定名称 View1 的 Table1。通过查询 sys.columns 很容易找到 View1 中的列,其中 object_id 等于来自 sys.objects 的视图名称的 object_id,但是您如何判断视图中的列来自哪个基础表?

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    在@browse_information_mode = 1 的情况下执行sp_describe_first_result_set。这将返回一个结果集,其中包含每个视图列的基础表名和列名以及其他元数据。对于从表达式派生的视图列,源信息将为 NULL,但其他元数据(例如数据类型信息)将包括在内。

    EXEC sp_describe_first_result_set
          @tsql=N'SELECT * FROM dbo.YourView;'
        , @params = NULL
        , @browse_information_mode = 1;
    

    请注意,sp_describe_first_result_set 是在 SQL Server 2012 中引入的,因此这在 SQL Server 的早期版本中不起作用。

    【讨论】:

    • 太棒了!如果原始视图语句是select Table1.Column1, Table2.Column1 from Table1 inner join Table2 on Table1.Column2 = Table2.Column2,有没有办法告诉 Table1 是“来自”所基于的基表?
    • @tdinpsp,元数据将显示视图暴露的列的来源。对于内部连接查询,实际上并没有“基”表的概念。无论表是在FROM 还是JOIN 中指定的,结果都是相同的,并且源将是在SELECT 子句中指定的表。
    猜你喜欢
    • 1970-01-01
    • 2016-04-18
    • 2017-05-18
    • 1970-01-01
    • 2014-08-06
    • 2019-08-31
    • 1970-01-01
    • 2013-11-08
    • 2011-08-21
    相关资源
    最近更新 更多