Оператор не выполняется при использовании имени базы данных в переменной - PullRequest
1 голос
/ 12 января 2012

Этот оператор работает:

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 Ответ

1 голос
/ 12 января 2012

Вы не можете передать имя БД в таком запросе в переменную, вместо этого используйте динамический запрос:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...