查找具有相同正文的冗余存储过程

Find redundant stored procedures which have the same body

提问人:Srinivas 提问时间:8/22/2023 最后编辑:Dale KSrinivas 更新时间:10/15/2023 访问量:119

问:

我有一个数据库,有一些存储过程名称不同但主体相同。如何使用 T-SQL 语句动态标识它们?

我不能使用表的定义列,因为它中有创建过程名称。因此,如果没有它,我如何检查动态冗余过程。information_schema.routines

我尝试使用不同的联接和例程表,但找不到正确的解决方案。

sql-server t-sql 存储过程 动态 sql 冗余

评论

1赞 HABO 8/22/2023
如果您知道 SP 的名称,也许来自 中的另一列,则可以将定义中的名称与占位符(例如 )进行比较,并比较生成的定义。稍微容易出错,但只是一个开始。information_schema.routinesreplace'Beatrice'
2赞 Dan Guzman 8/22/2023
过程名称是存储在 SQL Server 目录视图中的过程正文的一部分。仅考虑后面的文本进行比较的可靠方法是使用 T-SQL 分析器(例如 TSql160Parser,但由于这不是您请求的 T-SQL 语句,因此我不会添加示例作为答案。CREATE PROCEDURE
1赞 Aaron Bertrand 8/22/2023
写了一篇关于从存储过程正文分析参数的系列文章,并演示了为什么即使在比 T-SQL 更擅长的语言中也很难做到这一点。特别是,一个过程或另一个过程的正文中的注释可能使冗余过程无法识别。
2赞 Aaron Bertrand 8/22/2023
@Dan确实如此。并没有试图充实所有的细微差别,只是你必须写一些东西,而且有比 T-SQL 更好的工具。
1赞 Stuck at 1337 8/22/2023
仍然没有解释为什么它需要 T-SQL。“我需要一个魔术贴做的水桶。”魔术贴不是运水的正确工具,T-SQL 也不是分析 T-SQL 的正确工具。

答:

1赞 Marmiton 8/29/2023 #1

我知道您的问题表明您希望在 SQL 中执行此操作,但您也可以考虑使用 SQL 搜索之类的东西根据存储过程主体中的关键字查找这些重复项。

关于过程的对象类型和基于文本的匹配。

image showing list of object types available in sql search

image showing list of matching types inside of sql search

链接到 Redgate 网站免费下载 / 有关 SQL 搜索插件的更多信息

https://www.red-gate.com/products/sql-search/