6

我早就知道 SQL Server Management Studio 中的“查看依赖项”功能几乎没有用处,因为它几乎不会返回所有依赖项,但是,有更好的选择吗?出于显而易见的原因,这是一个非常强大的功能,但是如果您不能依赖结果(就像 Microsoft 的情况一样),您无论如何都必须手动完成所有工作,以确保安全。

看起来这很容易实现,是否有任何工具可以有效地处理这个问题?

作为旁注,有人知道“查看依赖项”有什么问题吗?是否存在难以识别的特定依赖类别?

4

4 回答 4

4

迟到但希望有用,因为推荐的工具是免费的……</p>

我正在使用与大卫推荐的工具类似的工具——ApexSQL 搜索。他们声称拥有自己的依赖跟踪机制,适用于除动态 SQL 之外的所有内容。

我还没有详细测试它来确认这一点……

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

于 2013-08-28T08:29:35.820 回答
2

Red Gate 有一个名为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

这是一篇关于查找依赖项的文章:

在 SQL Server 2005 中查找依赖项

于 2012-05-14T15:03:45.860 回答
2

您可以尝试使用 SQL Search,它对对象名称和文本定义进行文本搜索。优点是它还会拾取动态 SQL 引用,缺点是它可能会拾取误报,因为它不是基于真正的依赖树进行搜索。

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

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

于 2012-05-14T15:17:56.867 回答
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'
于 2012-12-12T21:01:25.340 回答