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 2008数据库到SQL Server 2005