如何找到构成视图的表和列

问题描述 投票:0回答:4

我在我们的一个数据库中有一个视图,我需要找出视图中的值来自哪里

我该怎么做? (SQL Server 管理工作室)

sql sql-server view
4个回答
2
投票

试试这个

sp_helptext viewname 

这将为您提供视图文本,您可以从那里了解表格及其列。


1
投票
SELECT TABLE_NAME, VIEW_DEFINITION FROM INFORMATION_SCHEMA.Views WHERE TABLE_NAME='view_Name'

1
投票

在 SQL Server Management Studio 中,转到对象资源管理器,找到您感兴趣的视图,右键单击它,然后选择

Script View As > CREATE To > New Query Editor Window

定义视图并因此显示它所依赖的所有基表的 SQL 脚本将为您编写一个新的查询编辑器窗口。

enter image description here

或者在 Management Studio 中,您还可以使用

sp_depends
系统存储过程来获取对象的所有依赖项:

EXEC sp_depends @objname = N'HumanResources.vJobCandidate'

给你一个输出:

enter image description here


0
投票

获取视图列

  1. 查看列列表及其数据类型等
SELECT
   [c].*
FROM
   [INFORMATION_SCHEMA].[COLUMNS] [c]
      INNER JOIN [INFORMATION_SCHEMA].[TABLES] [t] ON [c].[TABLE_CATALOG] = [t].[TABLE_CATALOG] AND [c].[TABLE_SCHEMA] = [t].[TABLE_SCHEMA] AND [c].[TABLE_NAME] = [t].[TABLE_NAME]
WHERE
   [t].[TABLE_TYPE] = 'VIEW'
  1. View 定义本身,可以查看数据库本机代码

使用系统进程:

sp_helptext 'my_schema.vw_view_name'

通过查询:

SELECT
   [v].[TABLE_SCHEMA]
   , [v].[TABLE_NAME]
   , [v].[VIEW_DEFINITION]
FROM
   [INFORMATION_SCHEMA].[views] [v]
  1. 视图列及其基表,注意并非所有视图列都会出现在这里。 MSSQL 只返回倾向于直接映射到基表的列,例如没有别名。此外,可以基于视图创建视图,因此可能需要遍历整个树,具体取决于需要。
SELECT * FROM [INFORMATION_SCHEMA].[VIEW_COLUMN_USAGE] 

这里有一个信息量更大的查询,它返回所有视图列。

BASED_ON_TABLE_IS_KNOWN
列是一个标志,表示是否找到了视图列的基表/视图列。

SELECT
   IIF([cu].[VIEW_NAME] IS NULL ,'N' ,'Y') [BASED_ON_TABLE_IS_KNOWN]
   , [c].[TABLE_CATALOG] [VIEW_CATALOG]
   , [c].[TABLE_SCHEMA] [VIEW_SCHEMA]
   , [c].[TABLE_NAME] [VIEW_NAME]
   , [c].[COLUMN_NAME] [VIEW_COLUMN_NAME]
   , [cu].[TABLE_NAME] [BASED_ON_TABLE_NAME]
   , [cu].[TABLE_SCHEMA] [BASED_ON_TABLE_SCHEMA]
   , [cu].[TABLE_CATALOG] [BASED_ON_TABLE_CATALOG]
   , [cu].[COLUMN_NAME] [BASED_ON_COLUMN_NAME]
   , c.[DATA_TYPE]

FROM
   ( [INFORMATION_SCHEMA].[COLUMNS] [c] INNER JOIN [INFORMATION_SCHEMA].[TABLES] [t]
     ON [c].[TABLE_CATALOG] = [t].[TABLE_CATALOG] AND [c].[TABLE_SCHEMA] = [t].[TABLE_SCHEMA] AND [c].[TABLE_NAME] = [t].[TABLE_NAME] )
      LEFT OUTER JOIN [INFORMATION_SCHEMA].[VIEW_COLUMN_USAGE] [cu]
                      ON [c].[COLUMN_NAME] = [cu].[COLUMN_NAME] AND [cu].[VIEW_CATALOG] = [t].[TABLE_CATALOG] AND [cu].[VIEW_SCHEMA] = [t].[TABLE_SCHEMA] AND [cu].[VIEW_NAME] = [t].[TABLE_NAME]

WHERE
   [t].[TABLE_TYPE] = 'VIEW'
   AND [t].[TABLE_NAME] = 'vw_invoice_main'
   AND [t].[TABLE_SCHEMA] = 'dev_test_example_2'
  1. View 引用的表/视图
SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
  1. 使用MSSQL系统对象视图和表,这些包含丰富的信息。暂时不在我的回答范围内,有时间会更新!
© www.soinside.com 2019 - 2024. All rights reserved.