我有这样一个 过程
ALTER  proc pj
  @mon datetime(20)
as
 set nocount on
begin
 declare @sqlstr varchar(200)
 select @sqlstr='select * from 
  openquery(DB2fs,'+'''select deptid,sum(totquantsales) from EM.T_SALES_SALESLIST where businessmonth='+@mon+' group by deptid order by deptid'''+')'
 execute(@sqlstr)
end在我执行 EXEC PJ '2007-12-01'的时候总提示@MON参数无效呢.
说明:DB2FS是我在SQLSERVER上建一个联接到DB2的链接服务器
 
如果不用OPENQUERY我要如何操作我链接服务器中的数据表?

解决方案 »

  1.   

    declare   @sqlstr   varchar(200)
      select   @sqlstr='select   *   from  
        openquery(DB2fs,'+'''select   deptid,sum(totquantsales)   from   EM.T_SALES_SALESLIST   where   businessmonth='''+@mon+'''   group   by   deptid   order   by   deptid'''+')'再加个行不?
      

  2.   

    我这个方法试过了,仍然不可以.在DB2里,businessmonth是DATETIME类型的.
      

  3.   

    SQL的错误提示
    服务器: 消息 295,级别 16,状态 3,过程 pj,行 7
    从字符串转换为 smalldatetime 数据类型时发生语法错误。
      

  4.   

    用 sp _ executesql 
      

  5.   

    SET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS ON 
    GOALTER  proc pj
      @monn smalldatetime
    as
     set nocount on
    begin declare @sqlstr varchar(200)execute sp_executesql 
              N'select * from 
      openquery(DB2fs,''select deptid,sum(totquantsales) from EM.T_SALES_SALESLIST where businessmonth=@mon group by deptid order by deptid'')',
              N'@mon smalldatetime',
              @mon = @monnendGO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON GO这样写有问题,请楼上兄弟指教一下,
      

  6.   

    问题解决了.用了笨办法,将@MON 转成VARCHAR,就可以了.