同じようにSQLを作成しました。このスクリプトは、
declare @OldDb varchar(250), @newDB varchar(250)
select @OldDb = '' , ---------->>> provide old db name
@newDB = '' ---------->>> provide new db name
create table #ViewList (Id int identity , ViewName varchar(250))
insert into #ViewList
select TABLE_NAME from INFORMATION_SCHEMA.VIEWS where TABLE_NAME IN () ---------->>> provide you view list
create table #ViewDef( ViewDef nvarchar(max) , ViewName varchar(250) ,Id int )
declare @minId int , @maxid int , @sql nvarchar(max) ='' , @ViewName varchar(250)
select @minId = min(Id) , @maxid = max(id) from #ViewList
while @minId <= @maxid
begin
select @ViewName = ViewName from #ViewList where id = @minId
set @sql = ' insert into #ViewDef (ViewDef)
exec sp_helptext '+ @ViewName +'
update #ViewDef
set ViewName = '''+ @ViewName +''',
id = ' + cast(@minId as varchar(10)) +'
where id is null
update #ViewDef
set ViewDef = replace(ViewDef , '''+ @OldDb+''','''+ @newDB +''')
where id = ' + cast(@minId as varchar(10)) +'
update #ViewDef
set ViewDef = replace(ViewDef , ''create'',''alter'')
where id = ' + cast(@minId as varchar(10)) +'
'
exec sp_executesql @sql
SET @sql = ''
select @sql = @sql + ViewDef from #ViewDef where id = @minId
exec sp_executesql @sql
--print @sql
set @minId = @minId +1
end
を修正したいビューの2入力 1.旧DB名 2.新しいDB名 3.リスト**スクリプトをテストし、任意の損失を避けるために、あなたの古い定義を保存してくださいかかります上記のスクリプトにバグがある場合
SSMS:DBを右クリックし、スクリプトを生成し、ビューを選択し、スクリプトを新しいウィンドウにドラッグして検索して置き換えて実行します。 –
ありがとうAlex K.それは私が長い間それをやった方法ですが、私はより速い解決策が必要です。また、複数のデータベースでは、置き換えを実行した後に間違ったデータベース(たとえば、デフォルト)を更新する可能性があるため、そのように行うのはエラーが発生しやすいです。 –