Come utilizzare la variabile nel nome del database di destinazione per l'istruzione insert?

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

  •  05-07-2019
  •  | 
  •  

Domanda

Voglio dichiarare un nome server e usare questo nome in un'istruzione insert. Finora tutto ciò che ho ricevuto è un messaggio di errore.

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

Questo mi dà:

Msg 102, Level 15, State 1, Line 6
Incorrect syntax near '.'.
È stato utile?

Soluzione

Ho già riscontrato questo problema e l'unica soluzione che ho riscontrato è sql dinamico

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)

Altri suggerimenti

Dovrai usare sql dinamico per questo. Prova quanto segue:

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

Se è necessario inserire in database diversi dallo stesso database di origine, utilizzare SQL dinamico proprio come dicono gli altri.

Tuttavia, se il problema è che si desidera sincronizzare devserver1 con devserver2 e prodserver1 con prodserver2 e disporre dell'altro database come opzione di configurazione, utilizzare i sinonimi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top