确定SQL Server中视图中引用的表
如何了解SQL Server中视图中使用的表?是否有脚本或工具可以让我知道视图中使用的表,并可以列出字段 希望这能澄清问题。如果没有,请告诉我 请导游!谢谢确定SQL Server中视图中引用的表,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,如何了解SQL Server中视图中使用的表?是否有脚本或工具可以让我知道视图中使用的表,并可以列出字段 希望这能澄清问题。如果没有,请告诉我 请导游!谢谢 select cols.* from sys.sql_expression_dependencies objs outer apply sys.dm_sql_referenced_entities ( OBJECT_SCHEMA_NAME(objs.referencing_id) + N'.' + object_name(obj
select
cols.*
from
sys.sql_expression_dependencies objs
outer apply sys.dm_sql_referenced_entities ( OBJECT_SCHEMA_NAME(objs.referencing_id) + N'.' + object_name(objs.referencing_id), N'OBJECT' ) as cols
where
objs.referencing_id = object_id('view_name_here')
参考:。查看(大多数)对象内容的最简单方法是:
sp_helptext blah
用对象的名称替换blah。这将产生创建对象的实际代码。例如,在这种情况下,可能会导致:
CREATE VIEW blah
AS
select blah.column1,blah.column2 from blah_table
您可以使用DISTINCT仅获取表
Select DISTINCT cols.referenced_entity_name from
sys.sql_expression_dependencies objs outer apply
sys.dm_sql_referenced_entities (
OBJECT_SCHEMA_NAME(objs.referencing_id) + N'.' +
object_name(objs.referencing_id), N'OBJECT' ) as cols where
objs.referencing_id = object_id('viewname')
此信息可从信息模式中获得
SELECT *
FROM INFORMATION_SCHEMA.VIEW_COLUMN_USAGE AS cu
JOIN INFORMATION_SCHEMA.COLUMNS AS c
ON c.TABLE_SCHEMA = cu.TABLE_SCHEMA
AND c.TABLE_CATALOG = cu.TABLE_CATALOG
AND c.TABLE_NAME = cu.TABLE_NAME
AND c.COLUMN_NAME = cu.COLUMN_NAME
WHERE cu.VIEW_NAME = 'viewtablename';
使用下面的简单查询,您可以知道视图中使用了哪些表:
SELECT view_name, Table_Name
FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
WHERE View_Name = 'ViewName'
可能的副本。您可以找到依赖项,但无法获得字段列表,因为tooThis不是的完全副本。有单独的答案。请不要投票给close.GSerg;谢谢你。你从哪里得到的剧本?因为脚本为所有columns@Xorpower我刚刚编写了它,在BOL中查找了所需的sysview。它确实有效,表名在
引用的\u实体\u名称中
,列名在引用的\u次要\u名称中
。如果不适合您,请尝试提供更限定的视图名称(例如dbo.view\u name
),或在检查视图之前重新编译该视图。仅当视图中引用了另一个视图时,此操作才有效。reference_entity_name显示在我的案例中引用的另一个视图,而不是表名。是列名在ref\u minor\u name中。@Xorpower那么您的数据库还有其他问题。该查询确实显示了所有引用的表和视图。若要仔细检查,请下载(免费版本),打开视图并切换到依赖项选项卡。为什么不从sys.dm\u sql\u referenced\u entities('dbo.foo',N'OBJECT')选择referenced\u entity\u name,referenced\u minor\u name,referenced\u minor\u name,其中referenced\u minor\u name不为空?outerapply
似乎只是引入了额外的行,因为它使用相同的值重复调用。