我正在编写一个数据迁移脚本,用于将具有相同模式的3个独立数据库中的数据导入新数据库。所有数据库都驻留在同一个SQL Server实例上。
将查询复制并粘贴3次似乎非常浪费:
insert NewTable(NewField1, NewField2)
select OldField1, OldField2
from OldDb1..OldTable
insert NewTable(NewField1, NewField2)
select OldField1, OldField2
from OldDb2..OldTable
insert NewTable(NewField1, NewField2)
select OldField1, OldField2
from OldDb3..OldTable
...显然,如果我需要调整脚本,那将是一个噩梦...加上我很幸运,只有3个数据库,但如果有100个数据库怎么办?
最重要的是,我想编写一个以数据库名称作为参数的脚本,这样我就可以运行一个脚本3次,例如
create proc MigrateData(@db database)
as
insert NewTable(NewField1, NewField2)
select OldField1, OldField2
from @db..OldTable
...但当然这种语法不起作用。
我可以这样做:
create proc MigrateData(@db varchar(50))
as
begin
declare @cmd varchar(max);
set @cmd = 'insert NewTable(NewField1, NewField2)
select OldField1, OldField2
from '+@db+'..OldTable';
exec @cmd;
end
但是...... 哎呀!
我该怎么做?
答案 0 :(得分:2)
为什么不将它切换到外部数据库而不是从外部数据库中进行SELECT?这样您就可以从每个外部数据库运行脚本,或者只需更改第一行以使用正确的源。
例如:
USE OldDatabase1
GO
insert NewDatabase.NewTable(NewField1, NewField2)
select OldField1, OldField2
from OldTable
或者删除USE语句并让连接确定要开始的正确数据库。
或者,你可能只能使用动态SQL实现你想要的东西,就像你说的那样,你好。