Comment utiliser une variable dans le nom de la base de données cible pour une instruction insert?

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

  •  05-07-2019
  •  | 
  •  

Question

Je souhaite déclarer un nom de serveur et utiliser ce nom dans une instruction insert. Jusqu'à présent, tout ce que j'ai obtenu est un message d'erreur.

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

Cela me donne:

Msg 102, Level 15, State 1, Line 6
Incorrect syntax near '.'.
Était-ce utile?

La solution

J'ai déjà eu ce problème et le seul travail que j'ai trouvé est SQL dynamique

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)

Autres conseils

Vous devrez utiliser SQL dynamique pour cela. Essayez ce qui suit:

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 vous devez insérer plusieurs bases de données à partir de la même base de données source, utilisez un SQL dynamique, comme d’autres le disent.

Cependant, si le problème est que vous souhaitez synchroniser devserver1 avec devserver2 et prodserver1 avec prodserver2 et que l'autre base de données soit une option de configuration, utilisez des synonymes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top