Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确定SQL Server中视图中引用的表_Sql_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

确定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

如何了解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(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
似乎只是引入了额外的行,因为它使用相同的值重复调用。