我想声明一个服务器名称并在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 '.'.
答案 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同步,并将另一个数据库作为配置选项,则使用同义词。