Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Script change '%string%' in stored procs & alter  [new]
MS_t_SQL
Member

Откуда:
Сообщений: 23
Может поделится кто отлаженным скриптом или реком-ет плагин?
Нужен поиск строки в тексте всех процедур и их замена на новые.
22 мар 17, 17:53    [20322340]     Ответить | Цитировать Сообщить модератору
 Re: Script change '%string%' in stored procs & alter  [new]
MacaronicTragedy
Member

Откуда:
Сообщений: 99
MS_t_SQL,

Готового скрипта у меня нет. Но, текст процедур можно посмотреть в sys.sql_modules. можно присваивать переменной значение из поля text, выполнять replace, а потом с помощью динамического sql изменять процедуры.
Но мне б как-то ссыкотно было. Я б лучше ручками, наверное.
22 мар 17, 18:33    [20322462]     Ответить | Цитировать Сообщить модератору
 Re: Script change '%string%' in stored procs & alter  [new]
правильный проходящий.
Guest
MS_t_SQL,

в Visual Studio поиск и замена в файлах. Или заскриптовать в один файл и в любом редакторе.
22 мар 17, 18:37    [20322479]     Ответить | Цитировать Сообщить модератору
 Re: Script change '%string%' in stored procs & alter  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 4176
MS_t_SQL
Может поделится кто отлаженным скриптом или реком-ет плагин?
Нужен поиск строки в тексте всех процедур и их замена на новые.


реком-ет

Это сокращение от слова "рекомендует"? понравилось, жестко компресснутое слово.

А сколько таких процедур, в которых надо менять?
22 мар 17, 19:36    [20322685]     Ответить | Цитировать Сообщить модератору
 Re: Script change '%string%' in stored procs & alter  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
MS_t_SQL,

это точно порочная и извращённая практика, выгружайте скрипты меняйте - поднимайте. Всё остальное лютое извращение.

зы "понравилось, жестко компресснутое слово." я так и не смог его расшифровать
22 мар 17, 20:46    [20322895]     Ответить | Цитировать Сообщить модератору
 Re: Script change '%string%' in stored procs & alter  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35369
Блог
в SSDT
или
https://msdn.microsoft.com/ru-ru/library/ms176090.aspx
22 мар 17, 22:00    [20323081]     Ответить | Цитировать Сообщить модератору
 Re: Script change '%string%' in stored procs & alter  [new]
MS_t_SQL
Member

Откуда:
Сообщений: 23
Ролг Хупин
MS_t_SQL
Может поделится кто отлаженным скриптом или реком-ет плагин?
Нужен поиск строки в тексте всех процедур и их замена на новые.


реком-ет

Это сокращение от слова "рекомендует"? понравилось, жестко компресснутое слово.

А сколько таких процедур, в которых надо менять?


спасибо, что оценили я старался быть понятым.

процедур не много, а вот кол-в %string% и баз порядочно. естественно я бы не заморачивался с одной базюкой...
23 мар 17, 09:19    [20323997]     Ответить | Цитировать Сообщить модератору
 Re: Script change '%string%' in stored procs & alter  [new]
MS_t_SQL
Member

Откуда:
Сообщений: 23
естественно, и same name процедуры от базы к базы отличаются тоже (и не говорите мне, что это извращение тоже, я тут не причём).
23 мар 17, 09:26    [20324033]     Ответить | Цитировать Сообщить модератору
 Re: Script change '%string%' in stored procs & alter  [new]
MacaronicTragedy
Member

Откуда:
Сообщений: 99
MS_t_SQL,

вот так можно это сделать, но еще раз повторюсь, это не очень хорошая затея, просто представь, что где-то изменится что-то лишнее, что ты не предусмотрел всего. головная боль обеспечена.

+
declare @text nvarchar(max),
		@id int

select m.object_id, m.definition into #tmp
from sys.sql_modules m 
join sys.objects o 
	on o.object_id = m.object_id 
where o.type = N'P'

select top 1 @id = object_id, @text = definition from #tmp

while @@rowcount > 0
begin
	set @text = replace(@text, N'create procedure ', N'alter procedure ')
	set @text = replace(@text, N'text to replace', N'replacement') -- меняй, то что тебе нужно

	begin try
		print N'*********************************************************************************************'
		print @text  -- Сначала все-таки лучше посмотреть, что будет сделано
		print N'*********************************************************************************************'
		--exec (@text) -- Если уверен, что все ок, раскомментируй эту строчку и запускай.
	end try

	begin catch
		print ERROR_MESSAGE()
	end catch

	delete from #tmp where object_id = @id
	select top 1 @id = object_id, @text = definition from #tmp
end
drop table #tmp
23 мар 17, 11:41    [20324758]     Ответить | Цитировать Сообщить модератору
 Re: Script change '%string%' in stored procs & alter  [new]
MacaronicTragedy
Member

Откуда:
Сообщений: 99
MS_t_SQL,

можешь в первом селекте в секции where дописать
 and m.definition like '%text to replace%'
, чтобы не альтерить понапрасну все процедуры.
23 мар 17, 11:45    [20324791]     Ответить | Цитировать Сообщить модератору
 Re: Script change '%string%' in stored procs & alter  [new]
MS_t_SQL
Member

Откуда:
Сообщений: 23
MacaronicTragedy,
да, ОГРОМНОЕ спасибо, конечно, допилю под своё виденье мира!
23 мар 17, 13:10    [20325371]     Ответить | Цитировать Сообщить модератору
 Re: Script change '%string%' in stored procs & alter  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
MS_t_SQL,

сей процесс является частью рефакторинга. Собственно, импортируйте базы в решение, например SQL Data Tools более половины вопросов разработки и публикации изменений отпадёт сама собой.
Не ведите разработку в боевых базах.
23 мар 17, 16:32    [20326740]     Ответить | Цитировать Сообщить модератору
 Re: Script change '%string%' in stored procs & alter  [new]
MS_t_SQL
Member

Откуда:
Сообщений: 23
добавил кол-во замен:
PRINT 'Замен ='
PRINT (DATALENGTH(@text)-DATALENGTH(REPLACE(@text,N'str','')))/DATALENGTH(N'str');
и print для больших строк:
DECLARE @Counter INT= 0, @TotalPrints INT
SET @TotalPrints = (LEN(@text) / 8000) + 1
WHILE @Counter < @TotalPrints
BEGIN
PRINT SUBSTRING(@text,@counter*8000,8000)
SET @Counter = @Counter + 1
END

но всё равно возникают всякие казусы типа
set @text = replace(@text, N'create procedure ', N'alter procedure ')
два пробела между create procedure :))
23 мар 17, 17:14    [20326897]     Ответить | Цитировать Сообщить модератору
 Re: Script change '%string%' in stored procs & alter  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
MS_t_SQL,

автор
два пробела между create procedure :))
а потом вы узнаете что можно писать CREATE PROC
23 мар 17, 17:18    [20326909]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить