我刚刚继承了一个包含许多表和存储过程的数据库。我用Microsoft SQL Server Management Studio
.
一个或多个存储过程更新特定表。我想对所有存储过程进行文本搜索,以查找更新表的过程。
如果原始 SQL 在我们的代码中,我只是grep
代码库,但是对于存储过程,我不确定如何搜索所有存储过程。
我还想重命名一些内容并在整个存储过程中进行查找/替换。
是否可以使用Microsoft SQL Server Management Studio
?在存储过程中进行搜索和替换?
不是 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 的结构并不完全严格),但是你可以编写你找到的存储过程的脚本,替换CREATE
与ALTER
并运行应用更改。
我编写了一个更广泛的存储过程,用于搜索所有数据库中的所有对象,甚至包括作业,我解释了几个警告并展示了比处理区分大小写更好的方法(您可能希望搜索是大小写敏感;以上假设您不关心并想要所有匹配项,无论大小写):LOWER()