【问题标题】:SQL Server: How to find unused fields in viewSQL Server:如何在视图中查找未使用的字段
【发布时间】:2010-11-10 16:45:53
【问题描述】:

有没有办法识别视图中被数据库中其他对象(例如 procs、UDF、其他视图)引用的字段?

我有大约 50 个视图将外部数据库作为其基础数据。本地视图基本上是来自外部数据库表的“SELECT *”。

我们正在更改外部数据库,我们需要弄清楚使用视图的应用程序实际使用了哪些字段,以便我们可以设置新的外部数据库以仅包含我们需要的那些字段。

谢谢!

【问题讨论】:

    标签: sql sql-server-2005 views


    【解决方案1】:

    用途:

    SELECT OBJECT_NAME(m.object_id), m.*
      FROM SYS.SQL_MODULES m
     WHERE m.definition like N'%my_view_name%'
    

    这将允许您搜索视图引用,包括特定列引用。

    背景:

    SYSCOMMENTSINFORMATION_SCHEMA.VIEWS 和 INFORMATION_SCHEMA.routines 具有 NVARCHAR(4000) 列,而 SYS.SQL_MODULES 定义列是 NVARCHAR(MAX)。因此,如果在位置 3998 处使用了“myViewName”,则不会找到它。 SYSCOMMENTS 确实有多行,但 ROUTINES 会截断。

    【讨论】:

    • +1 我得更好地了解 2005 年引入的 sys 表
    【解决方案2】:

    更新

    正如 OMG Poines 在搜索要使用模块的定义时指出的那样

    您可能仍然需要这些列,因此您需要将其加入到 sys.columns 表中

    SELECT OBJECT_NAME(m.object_id), c.*
      FROM SYS.SQL_MODULES m
            INNER JOIN sys.columns c
            ON m.object_id = c.object_Id
     WHERE m.definition like N'%externalDB%'
    

    对于那些 使用 2005 或更高版本的可怜人,您仍然可以使用以下内容。

    查找不超过 4000 个字符的视图

    SELECT * 
    FROM INFORMATION_SCHEMA.VIEWS
    where 
    VIEW_DEFINITION like '%externalDB%'
    

    如果您想要这些视图中的列,您可以执行以下操作

    select c.* from 
    
    information_schema.VIEWS vw
    INNER JOIN information_schema.COLUMNS c
    ON vw.Table_catalog = c.Table_catalog
    and vw.TABLE_SCHEMA= c.TABLE_SCHEMA
    and vw.TABLE_NAME= c.TABLE_NAME
    
    where 
    VIEW_DEFINITION like '%externalDB%'
    

    当然,如果这些视图引用本地表,那么您也会获得这些列

    注意:您可能希望使用 SYSCOMMENTS 而不是例程,但如果您的搜索字符串正在寻找接近 4000 倍数的内容,您仍然会遇到问题,因此对于那些在SQL 2000

    【讨论】:

      【解决方案3】:

      如果在 Management Studio 中右键单击视图,可以选择“查看依赖项” 这应该向您显示依赖于所选视图的所有其他对象(存储的过程、UDF、其他视图)。

      不幸的是,您必须逐个查看它实际使用的字段。

      只要您还没有直接从应用调用视图的动态 SQL,这应该会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-25
        • 2016-03-09
        • 2011-02-08
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 2020-03-23
        相关资源
        最近更新 更多