【问题标题】:Determine table referenced in a view in SQL Server确定 SQL Server 视图中引用的表
【发布时间】:2011-11-29 09:13:02
【问题描述】:

如何了解 SQL Server 视图中使用的表?是否有脚本或工具可以让我知道视图中使用的表格并列出字段?

希望这可以解决问题。如果没有,请告诉我。

请指导!谢谢!

【问题讨论】:

标签: sql sql-server sql-server-2008-r2


【解决方案1】:
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')

参考:sys.dm_sql_referenced_entities (Transact-SQL)

【讨论】:

  • GSerg;感谢那。你从哪里得到那个脚本的?因为脚本对所有列都返回 null
  • @Xorpower 我刚刚写了它,在 BOL 中查找了所需的 sysview。它确实有效,表名在referenced_entity_name 中,列名在referenced_minor_name 中。如果它不适合您,请尝试提供更合格的视图名称(例如 dbo.view_name)或在检查之前重新编译视图。
  • 这仅在视图引用了另一个视图时才有效。 reference_entity_name 显示了在我的案例中引用的另一个视图,而不是表名。是的列名在 ref_minor_name 中。
  • @Xorpower 那么您的数据库还有其他问题。该查询确实显示了所有引用的表和视图。要仔细检查,请下载 SQL Manager for SQL Server(免费版),打开您的视图并切换到 Dependecies 选项卡。
  • 为什么不只是select referenced_entity_name,referenced_minor_name from sys.dm_sql_referenced_entities ( 'dbo.foo', N'OBJECT' ) where referenced_minor_name is not nullOUTER APPLY 似乎只是引入了额外的行,因为它被重复调用并使用相同的值。
【解决方案2】:

查看(大多数)对象内容的最简单方法是:

sp_helptext blah

用对象的名称替换 blah。这将产生创建对象的实际代码。在这种情况下,例如它可能会导致:

CREATE VIEW blah
AS
  select blah.column1,blah.column2 from blah_table

【讨论】:

    【解决方案3】:

    此信息可从 INFORMATION_SCHEMA 获得

    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';
    

    【讨论】:

      【解决方案4】:

      使用下面的简单查询,您可以知道视图中使用了哪些表:

      SELECT view_name, Table_Name
      FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
      WHERE View_Name = 'ViewName'
      

      【讨论】:

        【解决方案5】:

        您可以使用 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')
        

        【讨论】:

          猜你喜欢
          • 2012-11-13
          • 1970-01-01
          • 2012-03-01
          • 2011-02-16
          • 2012-02-18
          • 1970-01-01
          • 1970-01-01
          • 2011-07-16
          • 2015-02-10
          相关资源
          最近更新 更多