Red Gate有一些相当不错的工具,但我不认为他们的Dependency Tracker会显示表如何受到触及它们的存储过程的影响。
是否有任何工具可以扫描数据库并确定从表中执行INSERT,UPDATE或DELETE记录的进程,而不是只触及\取决于它们?好像现在这样存在......
答案 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
功能
在存储过程,函数和视图中查找SQL文本的片段 等等
快速导航到服务器上任何位置的对象
查找对象的所有引用
希望这会对你有所帮助。