作为应用程序安装程序的一部分,我需要将一些数据插入到现有的数据库中。数据库的结构是已知的,但确切的名称不是;即我知道我需要插入的表的名称及其结构,但db名称是可变的。
db名称的结构是:AppDB_<version#>
(例如:AppDB_V20_1_2
)。不幸的是,当安装此应用程序的新主要版本时,之前的dbs将保留在服务器上,因此查询:
SELECT name FROM master..sysdatabases WHERE name LIKE 'AppDB%'
返回多个结果。
是否可以创建一个在整个结果范围内插入同一个表的查询?
也就是说,如果我有数据库:
AppDB_V1
AppDB_V2
AppDB_V3
我可以写一个有效的查询:
INSERT INTO [AppDB_V1].[dbo].[TableName] ...
INSERT INTO [AppDB_V2].[dbo].[TableName] ...
INSERT INTO [AppDB_V3].[dbo].[TableName] ...
事先不知道AppDB
s的数量或名称?
答案 0 :(得分:2)
答案 1 :(得分:0)
您可以生成动态sql语句:
声明@sql mvarchar(max);
设置@sql = N'';
选择@sql = @sql + N',从dbo.SourceTable插入'+ quotename(db.name)+ N'.dbo.Table1;' + char(13);
来自sys.databases db
其中db.name喜欢......
设置@sql = stuff(@sql,1,1,N'');
exec(@sql);