2012-05-14 27 views
5

我已经知道SQL Server Management Studio中的“查看依赖项”功能是边缘无用的,因为它几乎不会返回所有依赖项,但是,还有更好的选择吗?由于显而易见的原因,这是一个非常强大的功能,但如果你不能依赖结果(就像微软的情况一样),无论如何你都必须手工完成所有的工作,以保证安全。替代SQL Server Management Studio“查看依赖项”

这似乎很容易实现,有没有任何工具可以有效处理这个问题?

作为一个侧面说明,有没有人知道“视图依赖”有什么问题?是否存在一个特定的依赖类,它无法识别?

+0

http://sqlblog.com/blogs/aaron_bertrand/archive/2008/09/09/keeping-sysdepends-up-to-date-in-sql-server-2008。aspx –

回答

2

红门有一个名为SQL Dependency Tracker的工具,工作得很好。

您也可以针对sys.sql_dependencies视图编写一个查询,它将提供一些基本信息。与此相似:

SELECT o.name, o.type_desc, p.name, p.type_desc 
FROM sys.sql_dependencies d 
INNER JOIN sys.objects o 
    ON d.object_id = o.object_id 
INNER JOIN sys.objects p 
    ON d.referenced_major_id = p.object_id 

这里是为了寻找一个依赖文章:

Finding dependencies in SQL Server 2005

+0

虽然这可以回答这个问题,但它似乎是一个非常陡峭的投资,以满足上面强调的单一需求(显然这个工具还有其他功能,可能使其价值不菲)。任何其他(更便宜)的建议? –

+2

我更新了我的答案,可以使用针对依赖性视图的查询 – Taryn

2

你可以尝试使用SQL的搜索,这确实一个文本搜索对象名称和文本定义。其优点是它也会选择动态SQL引用,缺点是它可能会选择误报,因为它不是基于真正的依赖关系树进行搜索。

http://www.red-gate.com/products/sql-development/sql-search/

另一个优点是,它是目前免费。

+1

明确地说,它不会拾取所有动态SQL引用,特别是那些依赖对象可以作为参数并在应用程序或其他过程中定义为字符串。 –

+0

是的。没有什么特别的魔法可以解析T-SQL来重建对象引用......这可能是某种东西。我想这个功能需要SQL Search与SQL分析器一起工作。有趣的想法。 –

0

这是一个三步过程。仍然不完美,但有助于消除一些差距。假设您正在查找表“WidgetUser”的依赖关系:

首先,获取可能引用该表的所有模块的列表。将查询结果输出到文本:

select 'EXEC sys.sp_refreshsqlmodule ''dbo.' + OBJECT_NAME(m.object_id) + '''' 
from sys.sql_modules m 
where m.definition like '%WidgetUser%' 

接下来,粘贴输出文本并运行更新。这将是这样的:

EXEC sys.sp_refreshsqlmodule 'dbo.up_WidgetUser_Select' 
EXEC sys.sp_refreshsqlmodule 'dbo.up_WidgetUser_Update' 
EXEC sys.sp_refreshsqlmodule 'dbo.WidgetUserView' 
EXEC sys.sp_refreshsqlmodule 'dbo.ufx_WidgetUser_Fooinize' 
... 

现在,您的依赖是高达最新,运行sp_depends

EXEC sp_depends @objname = N'dbo.WidgetUser' 
4

下旬的一个,但希望有用的,因为推荐的工具是免费的...

我使用一个类似的工具来推荐大卫 - ApexSQL Search。他们声称拥有自己的依赖关系跟踪机制,适用于除动态SQL以外的所有应用程序。

我还没有详细测试,以确认这虽然......

免责声明:我不是在这家公司隶属于但我经常使用他们的工具。

相关问题