有没有办法对表名的所有存储过程进行文本搜索?

cho*_*ida 1 sql-server-2008

我刚刚继承了一个包含许多表和存储过程的数据库。我用Microsoft SQL Server Management Studio.

一个或多个存储过程更新特定表。我想对所有存储过程进行文本搜索,以查找更新表的过程。

如果原始 SQL 在我们的代码中,我只是grep代码库,但是对于存储过程,我不确定如何搜索所有存储过程。

我还想重命名一些内容并在整个存储过程中进行查找/替换。

是否可以使用Microsoft SQL Server Management Studio?在存储过程中进行搜索和替换?

Aar*_*and 5

不是 100% 可靠(可能会产生误报,或由于动态 SQL 等而遗漏东西):

SELECT s.name, p.name, m.definition
  FROM sys.schemas AS s
  INNER JOIN sys.procedures AS p
  ON s.[schema_id] = p.[schema_id]
  INNER JOIN sys.sql_modules AS m
  ON p.[object_id] = m.[object_id]
  WHERE LOWER(m.definition) LIKE N'%update%tablename%';
Run Code Online (Sandbox Code Playgroud)

你不能直接替换(我认为你很难构建一个包罗万象的替换表达式,因为 T-SQL 的结构并不完全严格),但是你可以编写你找到的存储过程的脚本,替换CREATEALTER并运行应用更改。

我编写了一个更广泛的存储过程,用于搜索所有数据库中的所有对象,甚至包括作业,我解释了几个警告并展示了比处理区分大小写更好的方法(您可能希望搜索是大小写敏感;以上假设您不关心并想要所有匹配项,无论大小写):LOWER()