Frage

Ich mag einen Server-Namen erklären und diesen Namen in einer Insert-Anweisung verwenden. Bisher alles, was ich bekam eine Fehlermeldung aus.

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

Das gibt mir:

Msg 102, Level 15, State 1, Line 6
Incorrect syntax near '.'.
War es hilfreich?

Lösung

Ich habe dieses Problem hatte vor und die einzige Arbeit, um ich gefunden ist dynamisch 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)

Andere Tipps

Sie müssen für diese dynamische SQL verwenden. Versuchen Sie wie folgt vor:

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

Wenn Sie in verschiedenen Datenbanken aus derselben Quelle Datenbank einfügen müssen, verwenden Sie dynamische SQL ebenso wie andere sagen.

Wenn aber das Problem ist, dass Sie mit devserver2 syncronize devserver1 mögen, und prodserver1 mit prodserver2 und haben die andere Datenbank als Konfigurationsoption, dann Synonyme verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top