【问题标题】:Query a view to get its column names查询视图以获取其列名
【发布时间】:2018-05-15 07:52:48
【问题描述】:

我有大量的 SQL 2008 R2 视图。我想知道视图中引用了哪些数据库字段。 有没有办法可以查询架构以列出这些列名?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    sys.sql_dependencies使用此查询。

    SELECT
        ViewName = O.name,
        ReferencedTableName = X.name,
        ReferencedColumnName = C.name,
    
        T.is_selected,
        T.is_updated,
        T.is_select_all,
    
        ColumnType = M.name,
        M.max_length,
        M.precision,
        M.scale
    FROM
        sys.sql_dependencies AS T
        INNER JOIN sys.objects AS O ON T.object_id = O.object_id
        INNER JOIN sys.objects AS X ON T.referenced_major_id = X.object_id
        INNER JOIN sys.columns AS C ON 
            C.object_id = X.object_id AND
            C.column_id = T.referenced_minor_id
        INNER JOIN sys.types AS M ON 
            M.system_type_id = C.system_type_id AND
            M.user_type_id = C.user_type_id
    WHERE
        O.type = 'V'
    ORDER BY
        O.name,
        X.name,
        C.name
    

    【讨论】:

    • 很酷的东西,我不知道sql_dependencies。 +1
    【解决方案2】:

    您可以查看视图定义并在那里查看引用的表。为此,您可以像这样简单地使用sp_helptext

    sp_helptext 'vStores'

    【讨论】:

      【解决方案3】:

      您可以从“sys.objects”中的元数据中检索视图定义,另请参阅此答案:

      Is there a way to retrieve the view definition from a SQL Server using plain ADO?

      不过,这不会直接为您提供基础表。

      当您将对象定义为具有架构绑定时,SQL Server 自己会执行此技巧:当使用架构绑定的其他对象引用的任何对象发生更改时,该更改将停止并给出错误。也许您可以查看 SQL Server 如何跟踪这些引用以查看视图中使用了哪些列。更多关于 Schema 绑定的信息:https://www.mssqltips.com/sqlservertip/4673/benefits-of-schemabinding-in-sql-server/

      【讨论】:

        猜你喜欢
        • 2012-02-03
        • 2011-05-09
        • 2018-07-08
        • 1970-01-01
        相关资源
        最近更新 更多