Редактировать все виды и сохраненные предустановки, найти и заменить? - PullRequest
3 голосов
/ 10 ноября 2009

Существует ли простой способ найти и заменить строку в каждом представлении и хранимой процедуре в моей базе данных SQL Server. Мне нужно заменить что-то вроде «X United Kingdom» на «X (UK)».

Ответы [ 3 ]

2 голосов
/ 10 ноября 2009

Вам нужно посмотреть на системные объекты и системные комментарии, тексты представлений и хранимые процедуры находятся в системных комментариях. Их типы V = View и P = Процедура находятся в системных объектах

/*Search Stored Procedure and View Text*/  
declare @searchString varchar(100)

SELECT @searchString = 'X United Kingdom' 

SELECT Distinct   
    SO.Name,  SC.[text]  
FROM   
    sysobjects SO (NOLOCK)  
    INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID  
        AND SO.Type IN ('P', 'V')  
        AND SC.Text LIKE '%' + @searchString + '%'

К сожалению, вы не можете обновить системные каталоги :( Поэтому единственный простой способ сделать это - использовать генератор сценариев, а затем искать и воспроизводить в вашем любимом текстовом редакторе.

EDIT: Я опубликовал сценарий, который генерирует операторы ALTER, но усечение более длинной процедуры и что syscomments устарели и т. Д. И т. Д. Я отменил эту часть своего ответа.

0 голосов
/ 06 апреля 2010

В Management Studio можно записать все хранимые процедуры и представления в новое окно запроса, а затем в диалоговом окне «Найти и заменить» выбрать «без учета регистра» и «использовать регулярные выражения»

В поле «Найти что» введите

SET QUOTED_IDENTIFIER {(ON|OFF)}\nGO[:b\n]+CREATE[:b\n]+{(PROC|VIEW)}

В поле «Заменить» введите

SET QUOTED_IDENTIFIER \1\nGO\nALTER \2

Это создаст скрипт ALTER для всех хранимых процедур и представлений. Затем вы можете выполнить стандартный поиск и заменить «X United Kingdom» на «X (UK)» и выполнить сценарий.

0 голосов
/ 10 ноября 2009

Вот как я это делаю:

SELECT distinct so.Name
from sysobjects as so 
inner join syscomments as sc 
on so.id = sc.id
AND so.Type = 'P'
AND sc.Text LIKE '%foo%'
ORDER BY so.Name

здесь запрос для поиска хранимой процедуры, содержащей определенный текст.

Создать резервную копию базы данных data .

Позже я генерирую скрипт «Drop and Create to» File, используя Management Studio. и использовать «Блокнот ++» для замены строк. Выполните скрипт снова. Не лучше, но у меня работает. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...