在变量中使用数据库名称时,不执行Statement

时间:2012-01-12 08:59:09

标签: sql sql-server-2008

此声明有效:

INSERT INTO TestDB2.dbo.MyTableName SELECT * FROM TestDB1.dbo2.MyTableName 

此声明不起作用:

DECLARE @SourceDatabase varchar(50)
DECLARE @TargetDatabase varchar(50)

SET @SourceDatabase = 'TestDB1'    
SET @TargetDatabase = 'TestDB2' 

INSERT INTO @TargetDatabase.dbo.PrcConfiguration SELECT * FROM @SourceDatabase.sppm.CONFIGURATION

OR without the '@'

INSERT INTO TargetDatabase.dbo.PrcConfiguration SELECT * FROM SourceDatabase.dbo1.CONFIGURATION

dbo和dbo1是架构。

我想使用相同的表将以后的数据从多个表从一个数据库移动到另一个数据库。

我错了什么?

1 个答案:

答案 0 :(得分:1)

您无法在变量中的此类查询中传递数据库名称,而是使用动态查询:

DECLARE @SourceDatabase varchar(50)
DECLARE @TargetDatabase varchar(50)
DECLARE @sql NVARCHAR(MAX)

SET @SourceDatabase = 'TestDB1'    
SET @TargetDatabase = 'TestDB2' 

SET @sql = N'INSERT INTO ['+@TargetDatabase+N'].dbo.PrcConfiguration SELECT * FROM ['+@SourceDatabase+N'].sppm.CONFIGURATION'

exec(@sql)