【发布时间】:2014-12-05 16:23:54
【问题描述】:
使用 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;
【问题讨论】:
-
不确定是否有更好的方法,但回到这个并让它按如下方式工作:
标签: sql view sql-server-2008-r2 sql-scripts