如何在目标数据库名称中使用变量来插入语句?

时间:2009-11-26 09:53:59

标签: sql tsql variables insert

我想声明一个服务器名称并在insert语句中使用此名称。到目前为止,我得到的只是一条错误消息。

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 '.'.

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)

答案 2 :(得分:0)

如果需要从同一源数据库插入不同的数据库,请像其他人所说的那样使用动态SQL。

但是,如果您想将devserver1与devserver2同步,并将prodserver1与prodserver2同步,并将另一个数据库作为配置选项,则使用同义词。