2013-02-25 5 views
2

Вопрос в значительной степени суммирует его. Я должен заменить текст в большом количестве для хранения процедур. Его не так много, что делать это вручную невозможно, но достаточно того, что я задаю вопрос. Я также предпочитаю автоматизацию, поскольку это уменьшает изменение пользовательской ошибки, когда мы делаем изменения в производстве.Обновление текста большого количества хранимых процедур

Я могу идентифицировать их как это:

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

Есть ли способ массы обновить их все, чтобы изменить «MyExampleLiteral» до 'MyOtherExampleLiteral?

Я бы даже согласился на способ открыть все сохраненные процедуры. Просто найти эти проспекты магазина в более крупном списке потребуется некоторое время.

Я думал о генерации операторов alter, используя вышеуказанные операторы select, но затем я теряю разрывы строк.

Спасибо заранее,

Это является Microsoft SQL Server.

+0

Использует Visual Studio вариант? В Visual Studio есть некоторые интересные функции, которые помогут в этом изменении. – puddinman13

+0

Нет ... Я не думаю, что смогу использовать Visual Studio. Я имею его в среде разработки, но не могу получить доступ к тестовым или производственным базам данных с сервера с установленным VS. – TizzyFoe

+0

В ssms сгенерируйте скрипт для всех сохраненных procs в новом окне запроса, а затем используйте ctrl + f, чтобы получить окно поиска и замены. Выберите необходимые параметры. Я думаю, что это сработает. – Kaf

ответ

0

В зависимости от рассматриваемой базы данных существуют различные инструменты. Например, Microsoft SQL Server Data Tools интегрируется с Visual Studio и позволяет вам выполнять эти типы операций довольно легко. База данных хранится в вашем решении в виде скриптов, и вы можете искать и заменять любое ключевое слово, которое хотите. Я предполагаю, что для других платформ будут доступны аналогичные инструменты.

0

Вы можете сделать это с помощью динамического sql. Запрос системных таблиц, чтобы получить весь ПЛов, содержащий ваш «MyExampleLiteral»:

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>%' 

Затем написать время цикл, чтобы пройти через эти object_ids. В цикле while введите OBJECT_DEFINITION() в строку и замените «MyExampleLiteral», затем замените CREATE PROCEDURE на ALTER PROCEDURE и выполните строку, используя sp_executesql.

Выполнение чего-то такого сумасшедшего, сначала сделайте резервную копию базы данных.

Смежные вопросы