SQL Server 2005 搜索某些数据库对象的视图

Posted

技术标签:

【中文标题】SQL Server 2005 搜索某些数据库对象的视图【英文标题】:SQL Server 2005 search views for certain database objects 【发布时间】:2009-10-18 05:38:07 【问题描述】:

SQL Server 中有没有一种方法可以列出数据库中从特定对象连接的所有视图?

ie:查找从表 myTable 连接的所有视图

【问题讨论】:

【参考方案1】:

你可以使用sys.sql_dependencies:

select object_name(object_id),* 
from sys.sql_dependencies
where referenced_major_id = object_id('<tablename>');

这将列出依赖于您的表的所有对象,您可以通过加入 sys.views 将其限制为视图:

select v.* 
from sys.sql_dependencies d
join sys.views v on d.object_id = v.object_id
where referenced_major_id = object_id('<tablename>');

【讨论】:

此 sys.sql_dependencies 在以后的版本中已弃用 + 它是否可靠?请看我的回答... sysdepends 已弃用。 sql_dependencies 于 2005 年推出,afaik 并未被弃用。亚伦的文章比我在这里评论的更深入地讨论了各种问题。我的观点是元数据依赖跟踪太脆弱了,好的做法是在开发源代码控制级别跟踪依赖关系。例如。 VSTS 数据库版 GDR R2 在这方面做得更好:microsoft.com/downloads/…。【参考方案2】:

您必须搜索代码,并且只有两个选项。请参阅下面的 cmets 为什么其他方法不可靠。

select
    object_name(m.object_id), m.*
from
    sys.sql_modules m
where
    m.definition like N'%my_view_name%'

或使用OBJECT_DEFINITION

syscmets 和 INFORMATION_SCHEMA 具有 nvarchar(4000) 列。因此,如果在位置 3998 处使用了“myViewName”,则不会找到它。 syscmets 确实有多行,但 ROUTINES 会截断。

在 SQL Server 2000 中,sys.depends 不可靠,这会影响菜单中的“查看依赖项”。我不知道它在 SQL 2005+ 中是否更好。示例:视图使用表,表被删除并重新创建,具有不同的 objectid,依赖 = 损坏。

【讨论】:

依赖在 2005 年和 2008 年仍然很容易被打破。我去年写过一篇关于这个的文章:is.gd/4pqU8【参考方案3】:

在 SQL Server 2005 中,您可以结合使用 sys.sql_dependencies 和对象文本的强力解析(如 gbn 的回答)。有关 SQL Server 2005 依赖项的详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms345449(SQL.90).aspx

在 SQL Server 2008 中,有新的依赖 DMV 和目录视图,它们比以前的方法(sys.dm_sql_referenced_entities / sys.dm_sql_referenced_entities / sys.sql_expression_dependencies)更值得信赖,但仍然很容易破坏它们。

请参阅this article 了解一些使这项工作更好的想法。另见http://msdn.microsoft.com/en-us/library/bb677168.aspx

【讨论】:

【参考方案4】:

以下是 unknown 提供的 link 中的一些示例(以防该站点在 *** 之前消失)

对于 SQL Server 2005,右键单击表名并选择“查看依赖关系”

为 SQL Server 提到的几个仅限 SQL 的方法:

SELECT routine_name, routine_type FROM INFORMATION_SCHEMA.ROUTINES
  WHERE ROUTINE_DEFINITION LIKE '%Employee%'

EXEC sp_depends @objname = N'HumanResources.Employee' ;

【讨论】:

ROUTINES 包含函数和过程,但不包含问题要求的视图。 sp_depends 会起作用,但列出的不仅仅是视图。 都不可靠:看我的回答

以上是关于SQL Server 2005 搜索某些数据库对象的视图的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2005,维护计划建议

SQL Server 2005 全文搜索:干扰词

如何转换SQL Server 2008数据库到SQL Server 2005

识别 Microsoft SQL Server 2005 中未使用的对象

我可以在SQL Server数据库中保存“对象”吗?

sql server 2005 一个索引多个字段,字段的排列顺序对搜索有啥影响??