Como usar a variável no nome do banco de dados de destino para instrução inserir?
Pergunta
Quero declarar o nome de um servidor e usar esse nome em uma instrução Insert. Até agora, tudo o que recebi é uma mensagem de erro.
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
Isso me dá:
Msg 102, Level 15, State 1, Line 6
Incorrect syntax near '.'.
Solução
I've had this problem before and the only work around I found is dynamic 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)
Outras dicas
You will have to use dynamic sql for this. Try the following:
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
If you need to insert into different databases from the same source database, use dynamic SQL just as others say.
However, if the problem is that you want to syncronize devserver1 with devserver2, and prodserver1 with prodserver2, and have the other database as a config option, then use synonyms.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow