1

Red Gate 有一些非常好的工具,但我不认为他们的 Dependency Tracker 显示了表是如何受到接触它们的存储过程的影响的。

是否有任何工具可以扫描数据库并确定哪些进程从表中插入、更新或删除记录,而不是仅仅触摸\依赖它们?似乎现在应该存在这个......

4

2 回答 2

2

不,依赖跟踪仍然不完美。原因是过程可以通过动态 SQL 引用表,如果对象被删除并重新创建,依赖关系可能会被破坏(我已经写过依赖关系如何在这里破坏)。我所依赖的最好的“第一次扫描”是:

SELECT OBJECT_NAME([object_id]) 
  FROM sys.sql_modules
  WHERE LOWER(definition) LIKE '%table_name%';

同样,这不会找到使用动态 SQL 构建语句的对象,并且它可能会产生误报,因为它table_name可能过于简单并且可能是其他对象或参数名称的一部分,或者仅包含在注释或注释掉的代码中。

您还可以检查使用sys.dm_exec_cached_plans相关 DMF/DMV 引用表的计划,但请注意,这不会找到任何已从缓存中推出的计划。

于 2012-08-20T18:08:15.780 回答
2

使用 SQL 搜索,您可以搜索列名并找到所有使用它的存储过程。

它是第三方工具,即Red Gate SQL Search

特征

  1. 在存储过程、函数、视图等中查找 SQL 文本片段

  2. 快速导航到碰巧在服务器上的对象

  3. 查找对象的所有引用

希望这会帮助你。

于 2012-08-20T20:05:19.050 回答