将数据插入到执行时名称未知的数据库中

时间:2014-01-24 15:13:29

标签: sql sql-server

作为应用程序安装程序的一部分,我需要将一些数据插入到现有的数据库中。数据库的结构是已知的,但确切的名称不是;即我知道我需要插入的表的名称及其结构,但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的数量或名称?

2 个答案:

答案 0 :(得分:2)

您可以使用动态SQL来构建insert语句。看看sp_executesql

查询数据库名称。然后使用游标浏览数据库名称并创建插入字符串。然后使用sp_executesql执行它。

希望它有所帮助!

答案 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);