2

这个问题几乎概括了它。我必须为存储过程替换大量文本。手动操作是不可能的,但足以让我问这个问题。我也更喜欢自动化,因为当我们在生产中进行更改时,它可以减少用户错误的变化。

我可以像这样识别它们:

select OBJECT_DEFINITION(object_id), *
from sys.procedures
where OBJECT_DEFINITION(object_id) like '%''MyExampleLiteral''%'
order by name

有没有办法批量更新它们以将“MyExampleLiteral”更改为“MyOtherExampleLiteral”?

我什至会找到一种打开所有存储过程的方法。只是在更大的列表中找到这些存储过程将需要一些时间。

我考虑过使用上面的 select 语句生成 alter 语句,但后来我丢失了换行符。

提前致谢,

这是 Microsoft SQL Server。

4

2 回答 2

0

您可以使用动态 sql 执行此操作。查询系统表以获取包含“MyExampleLiteral”的所有 SP:

SELECT [object_id] FROM sys.objects o
WHERE type_desc = 'SQL_STORED_PROCEDURE'
    AND is_ms_shipped = 0 
    AND OBJECT_DEFINITION(o.[object_id]) LIKE '%<search string>%'

然后,编写一个 while 循环来遍历这些 object_id。在 while 循环中,将OBJECT_DEFINITION()放入字符串并替换“MyExampleLiteral”,然后替换CREATE PROCEDUREALTER PROCEDURE并使用sp_executesql.

做这种疯狂的事情,请确保先备份数据库。

于 2013-02-26T00:03:14.623 回答
0

根据所讨论的数据库,可以使用不同的工具。例如,Microsoft SQL Server Data Tools 与 Visual Studio 集成,并允许您相当轻松地执行这些类型的操作。该数据库作为脚本存储在您的解决方案中,然后您可以搜索和替换您想要的任何关键字。我假设其他平台也会有类似的工具。

于 2013-02-25T22:34:30.550 回答