我早就知道 SQL Server Management Studio 中的“查看依赖项”功能几乎没有用处,因为它几乎不会返回所有依赖项,但是,有更好的选择吗?出于显而易见的原因,这是一个非常强大的功能,但是如果您不能依赖结果(就像 Microsoft 的情况一样),您无论如何都必须手动完成所有工作,以确保安全。
看起来这很容易实现,是否有任何工具可以有效地处理这个问题?
作为旁注,有人知道“查看依赖项”有什么问题吗?是否存在难以识别的特定依赖类别?
我早就知道 SQL Server Management Studio 中的“查看依赖项”功能几乎没有用处,因为它几乎不会返回所有依赖项,但是,有更好的选择吗?出于显而易见的原因,这是一个非常强大的功能,但是如果您不能依赖结果(就像 Microsoft 的情况一样),您无论如何都必须手动完成所有工作,以确保安全。
看起来这很容易实现,是否有任何工具可以有效地处理这个问题?
作为旁注,有人知道“查看依赖项”有什么问题吗?是否存在难以识别的特定依赖类别?
迟到但希望有用,因为推荐的工具是免费的……</p>
我正在使用与大卫推荐的工具类似的工具——ApexSQL 搜索。他们声称拥有自己的依赖跟踪机制,适用于除动态 SQL 之外的所有内容。
我还没有详细测试它来确认这一点……
免责声明:我不隶属于这家公司,但我确实经常使用他们的工具。
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 Search,它对对象名称和文本定义进行文本搜索。优点是它还会拾取动态 SQL 引用,缺点是它可能会拾取误报,因为它不是基于真正的依赖树进行搜索。
http://www.red-gate.com/products/sql-development/sql-search/
另一个优点是它目前是免费的。
这是一个三步过程。仍然不完美,但有助于消除一些差距。假设您正在查找表“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'