查询视图以获取其列名

时间:2018-05-15 07:52:48

标签: sql sql-server

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

3 个答案:

答案 0 :(得分:4)

针对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

答案 1 :(得分:2)

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

sp_helptext 'vStores'

答案 2 :(得分:0)

您可以从'sys.objects'中的metatdata中检索视图定义,另请参阅此答案:

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/