我有大量的SQL 2008 R2视图。我想知道视图中引用了哪些数据库字段。 有没有办法可以查询架构列出这些列名?
答案 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/