如以下例子:
declare @sqltcolde varchar(8000),@linkip varchar(300),
@locldb varchar(8000)set @linkip='192.168.18.20'
if exists(select * from master.dbo.sysservers where srvname='linkremote' )
begin
Exec sp_droplinkedsrvlogin linkremote,Null
Exec sp_dropserver linkremote
endEXEC sp_addlinkedserver
@server='linkremote',--被访问的服务器别名
@srvproduct='',
@provider='SQLOLEDB',
@datasrc=@linkip --要访问的服务器
EXEC sp_addlinkedsrvlogin
'linkremote', --被访问的服务器别名
'false',
NULL,
'sa', --帐号
'123' --密码select @locldb=db_name() ---取当前的数据库名称select *
FROM openquery(linkremote,'select * from cy302ncs.dbo.t_codes') 这样最后结果可以查询远端数据库表t_codes的数据,因为数据库名“cy302ncs”是动态的,我就把下面改了一下语句:
select *
FROM openquery(linkremote,'select * from '+@locldb+'.dbo.t_codes') 报错,是语法错误,请问如何能实现数据库名是动态的写法?
declare @sqltcolde varchar(8000),@linkip varchar(300),
@locldb varchar(8000)set @linkip='192.168.18.20'
if exists(select * from master.dbo.sysservers where srvname='linkremote' )
begin
Exec sp_droplinkedsrvlogin linkremote,Null
Exec sp_dropserver linkremote
endEXEC sp_addlinkedserver
@server='linkremote',--被访问的服务器别名
@srvproduct='',
@provider='SQLOLEDB',
@datasrc=@linkip --要访问的服务器
EXEC sp_addlinkedsrvlogin
'linkremote', --被访问的服务器别名
'false',
NULL,
'sa', --帐号
'123' --密码select @locldb=db_name() ---取当前的数据库名称select *
FROM openquery(linkremote,'select * from cy302ncs.dbo.t_codes') 这样最后结果可以查询远端数据库表t_codes的数据,因为数据库名“cy302ncs”是动态的,我就把下面改了一下语句:
select *
FROM openquery(linkremote,'select * from '+@locldb+'.dbo.t_codes') 报错,是语法错误,请问如何能实现数据库名是动态的写法?
FROM openquery(linkremote,''select * from '+@locldb+'.dbo.t_codes''')
DECLARE @sql nvarchar(1200)
begin
SELECT @sql = 'select *
FROM openquery(linkremote,select * from ' + @locldb+ '.dbo.t_codes)'EXECUTE(@sql)
end
declare @sql
set @sql = ' select * FROM openquery(linkremote,''select * from '
+ @locldb +'.dbo.t_codes'') ' exec(@sql)