use test
go
create table t(ID int)
go
insert t select 1
insert t select 2
go
--创建链接服务器
exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
godeclare @i int
set @i=1
exec('SELECT * FROM OPENQUERY(srv_lnk, ''SELECT * FROM test.dbo.t where ID='+@i+''')')

解决方案 »

  1.   

    LZ问的是如何把UID传出来, 而不是传进去.
      

  2.   

    我觉得应该把exec拿掉, set quoted_identifier off  
    declare @sql nvarchar(1000) 
    declare @mobile nvarchar(100)
    set @mobile= '142423254'
    set @sql=  'select uid from user1 where mobile_num=   '''+@mobile+  '''' 
    declare @Uid varchar(100)
    select @Uid = uid from OpenQuery(mysqllinkserver, @sql)或者把结果输入临时表, 再从临时表中读取?
    select * from OpenQuery(mysqllinkserver, @sql)
    INTO #tselect @uid = uid from #t
      

  3.   

    set quoted_identifier off   
    declare @sql nvarchar(1000) 
    declare @uid int 
    --set @mobile= 142423254  
    set @sql=  'select @uid = uid from OPENQUERY(mysqllinkserver,   '  'select uid from user1 where mobile_num=   '  '  '  '  '+@mobile+  '  '  '  '  '  '  ')  '  
    exec sp_executesql @sql,N'@uid int output',@uid output
    select @uid as uid
      

  4.   

    Generics ----
    OpenQuery 不接受参数
      

  5.   

    exec sp_executesql @sql,N '@uid int output ',@uid output 
    你这句什么意思 加个N
      

  6.   

    第 7 行: '@uid int output ' 附近有语法错误。
      

  7.   

    exec sp_executesql @sql,N'@uid int output  ',@uid output  
    不是
    exec sp_executesql @sql,N  '@uid int output  ',@uid output  这是语法,好好看看联机帮助