Использование SQL Server 2008 R2. Мне нужно написать сценарий SQL, который будет искать конкретный текст (например, имя сервера) в существующих представлениях SQL, заменить этот текст на другую строку, а затем обновить представление (ALTER VIEW). Я не могу понять, как писать этот скрипт. Кто-нибудь делает что-то подобное, с которым они могут делиться?Как обновить текст в представлении, а затем обновить представление в скрипте?
Могу ли я извлечь весь текст в переменную, выполнить REPLACE, а затем «переписать» весь вид из этой переменной?
Я могу изменить вид заявление, не зная, как лучше, чтобы получить представление обновляется с этой @viewtext переменной:
declare @viewtext nvarchar(max)
set @viewtext = (select definition from sys.objects so
join sys.sql_modules sm on sm.object_id = so.object_id
where so.type = 'V'
and so.object_id = object_id('dbo.vwHistoryByLocation'))
set @viewtext = (select replace(@viewtext,'.PROD.','.TEST.'))
set @viewtext = (select replace(@viewtext,'CREATE VIEW','ALTER VIEW'))
select @viewtext
Не уверен, что если есть лучший способ или нет, но вернулся к работая над этим и добилась его работы следующим образом:
declare @rc int = 0
declare @vwtext nvarchar(max)
declare @name nvarchar(max)
declare @descr nvarchar(max)
declare cur cursor for
select so.name, sm.definition from sys.objects so
join sys.sql_modules sm on sm.object_id = so.object_id
where so.type = 'V'
and sm.definition like '%.PROD.%';
open cur;
fetch next from cur into @name, @descr
while (@@FETCH_STATUS = 0)
begin
set @vwtext = (select replace(@descr,'.PROD.','.TEST.'))
set @vwtext = (select replace(@vwtext,'CREATE VIEW ','ALTER VIEW '))
select @vwtext
exec @rc = sys.sp_executesql @vwtext
fetch next from cur into @name, @descr;
end
close cur;
deallocate cur;
Не уверен, что есть лучший способ или нет, но вернулся к этому и получил его для работы следующим образом: – axSailing