2009-11-26 1 views
1

Я хочу объявить имя сервера и использовать это имя в инструкции insert. Пока все, что я получил, - сообщение об ошибке.Как использовать переменную в имени целевой базы данных для инструкции insert?

declare @machine nvarchar(6); 
declare @bar nvarchar(3); 
set @machine = 'Name00'; 
set @bar = 'foo' 

insert into @machine.dbname.dbo.table (column1, column2) 
select (column1, column2) 
from table 
where column1 = @bar 

Это дает мне:

Msg 102, Level 15, State 1, Line 6 
Incorrect syntax near '.'. 

ответ

2

Я имел эту проблему раньше, и только работа вокруг я нашел динамический SQL

declare @machine nvarchar(6) 
declare @bar nvarchar(3) 
declare @sql varchar(2000) 
set @machine = 'Name00' 
set @bar = 'foo' 


Set @sql ='insert into ' + @machine + '.dbname.dbo.table (column1, column2) 
select (column1, column2) 
from table 
where column1 = ''' + @bar + '''' 

--print (@sql) 
exec (@sql) 
4

Вам придется использовать динамический SQL для этого. Попробуйте следующее:

declare @machine nvarchar(6); 
declare @bar nvarchar(3); 
declare @query nvarchar(4000) 


set @machine = 'Name00'; 
set @bar = 'foo' 

set @query = 'insert into ' + @machine + '.dbname.dbo.table (column1, column2) select (column1, column2) from table where column1 = ''' + @bar + '''' 

execute dbo.sp_executesql @query 
0

Если вам нужно вставить в различные базы данных из одного источника базы данных, использование динамический SQL так же, как говорят другие.

Однако если проблема заключается в том, что вы хотите синхронизировать devserver1 с devserver2 и prodserver1 с prodserver2, а другую базу данных в качестве опции конфигурации, используйте синонимы.

Смежные вопросы