SQL Server对象依赖项

时间:2012-08-20 18:01:01

标签: sql-server-2008

Red Gate有一些相当不错的工具,但我不认为他们的Dependency Tracker会显示表如何受到触及它们的存储过程的影响。

是否有任何工具可以扫描数据库并确定从表中执行INSERT,UPDATE或DELETE记录的进程,而不是只触及\取决于它们?好像现在这样存在......

2 个答案:

答案 0 :(得分:2)

不,依赖性跟踪仍然不完美。原因是过程可以通过动态SQL引用表,如果删除和重新创建对象,则可以破坏依赖关系(我已经写过how dependencies can break here)。我所依赖的最好的“第一次扫描”是:

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检查引用表的计划,但请注意,这不会找到任何已从缓存中推出的计划。

答案 1 :(得分:2)

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

这是第三方工具, Red Gate SQL Search

功能

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

  2. 快速导航到服务器上任何位置的对象

  3. 查找对象的所有引用

  4. 希望这会对你有所帮助。