2009-11-26 48 views
1

我想聲明一個服務器名稱並在插入語句中使用此名稱。到目前爲止,我得到的只是一條錯誤消息。如何在插入語句的目標數據庫名稱中使用變量?

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 

這給了我:

Msg 102, Level 15, State 1, Line 6 
Incorrect syntax near '.'. 

回答

2

我以前有這個問題,唯一的工作,我發現身邊的動態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) 
4

你將不得不使用動態SQL這一點。請嘗試以下操作:

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 
0

如果你需要插入到不同的數據庫從相同的源數據庫,使用動態SQL就像別人說的那樣。

但是,如果問題是您要將devserver1與devserver2同步,並將prodserver1與prodserver2同步,並將另一個數據庫作爲配置選項,請使用同義詞。

相關問題