openquery里面不支持变量或表达式

解决方案 »

  1.   

    解决
    exec('select * from openquery(winy,''select * from gzcj.test where name='''+@item)
      

  2.   

    --可以改成这样的处理declare @item varchar(20)
    set @item='小明'exec('select * from openquery(winy,''select * from gzcj.test where name='''''+@item+''''''')')
      

  3.   

    declare @item varchar(20)
    set @item='小明'
    exec ('select * from openquery(winy,''select * from gzcj.test where name='''+@item+')')
      

  4.   

    多谢各位星星.三位的做法都正确.
     lsxaa(小李铅笔刀), leeboyan(★★宝宝★★) 语法上有点不通过.回复人: zjcxc(邹建) ( ) 信誉:439  2004-11-16 16:21:00  得分: 0  
     
     -----------------------------------------------------------------------
       --可以改成这样的处理declare @item varchar(20)
    set @item='小明'exec('select * from openquery(winy,''select * from gzcj.test where name='''''+@item+''''''')')
     -----------------------------------------------------------------------
    --通过.
      
     
      

  5.   

    但请问在自定义函数里可以使用exec吗?
      

  6.   

    只能用exec  调用扩展存储过程,这在联机帮助上有明文规定
      

  7.   

    想法是在函数中执行
    declare @item varchar(20)
    set @item='小明'
    exec('select * from openquery(winy,''select * from gzcj.test where name='''''+@item+''''''')')
    返回table值的.按想法,现在的写法主要如下:
    -------------------------------------
    create function CheckFilesInOracleByField(@item varchar(20),@field int)
    returns @re table
    (col1 varchar(20),
    col2 varchar(50),
    col3 varchar(20),
    col4 varchar(245)
    )
    as 
    begin
    if @field=1 
    begin 
    EXECUTE('select  *  from  openquery(winy,''select  *  from  gzcj.test  where  name='''''+@item+''''''')')  
    end
    return
    end
    -------------------------------------
    但联机里说明;
    EXECUTE 语句,该语句调用扩展存储过程。 
    但本人未写过扩展存储过程
    现在求一想法:
    可不可以把上面的东西.
    EXECUTE('select  *  from  openquery(winy,''select  *  from  gzcj.test  where  name='''''+@item+''''''')') 
    写到写过扩展存储过程里,再注册;
    如果不能,怎解决:
    通过变量,得到table的返回值;注意此操作过程要执行
    EXECUTE('select  *  from  openquery(winy,''select  *  from  gzcj.test  where  name='''''+@item+''''''')')
      

  8.   

    -------------------------------------
    create function CheckFilesInOracleByField(@item varchar(20),@field int)
    returns @re table
    (col1 varchar(20),
    col2 varchar(50),
    col3 varchar(20),
    col4 varchar(245)
    )
    as 
    begin
    if @field=1 
    begin 
    insert into @re-------------------------漏了这行;
    EXECUTE('select  *  from  openquery(winy,''select  *  from  gzcj.test  where  name='''''+@item+''''''')')  
    end
    return
    end
    -------------------------------------晕了,insert into 本来就不能用exec,好晕.
    看来得换想法了.