代码之家  ›  专栏  ›  技术社区  ›  Chris Burgess

SQL Server:如何在视图中查找未使用的字段

  •  2
  • Chris Burgess  · 技术社区  · 14 年前

    我有大约50个视图引用外部数据库作为其底层数据。本地视图基本上是从外部数据库表中选择*。

    我们正在更改外部数据库,我们需要找出使用视图的应用程序实际使用的字段,以便我们可以设置新的外部数据库,使其仅包含我们需要的字段。

    谢谢!

    3 回复  |  直到 14 年前
        1
  •  2
  •   OMG Ponies    14 年前

    使用:

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

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

    SYSCOMMENTS , INFORMATION_SCHEMA.VIEWS 和INFORMATION-SCHEMA.routines有NVARCHAR(4000)列,而 SYS.SQL_MODULES 系统注释 有多行,但是 ROUTINES

        2
  •  1
  •   Conrad Frix    14 年前

    更新

    正如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%'
    

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

    注意

        3
  •  0
  •   BradC    14 年前

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

    不幸的是,你必须检查每个字段,看看它实际使用的字段。

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