¿Cómo usar la variable en el nombre de la base de datos de destino para la instrucción de inserción?

StackOverflow https://stackoverflow.com/questions/1802692

  •  05-07-2019
  •  | 
  •  

Pregunta

Quiero declarar un nombre de servidor y usar este nombre en una declaración de inserción. Hasta ahora todo lo que tengo es un mensaje de error.

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

Esto me da:

Msg 102, Level 15, State 1, Line 6
Incorrect syntax near '.'.
¿Fue útil?

Solución

He tenido este problema antes y la única solución que encontré es sql dinámico

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)

Otros consejos

Tendrá que usar sql dinámico para esto. Pruebe lo siguiente:

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

Si necesita insertar en diferentes bases de datos desde la misma base de datos de origen, use SQL dinámico tal como lo dicen otros.

Sin embargo, si el problema es que desea sincronizar devserver1 con devserver2 y prodserver1 con prodserver2, y tener la otra base de datos como una opción de configuración, utilice sinónimos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top