SOS急啊.高手请进. 20CSDN]

发布时间:2014-1-1 0:09:55编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"SOS急啊.高手请进. 20CSDN]",主要涉及到SOS急啊.高手请进. 20CSDN]方面的内容,对于SOS急啊.高手请进. 20CSDN]感兴趣的同学可以参考一下。

现在遇到这样的问题:我原来使用的是。SQL Server2000现在换了一个数据库。SQL Server2005。 结果所有的存储过程都不能用了。 出错提示为:“不允许对具有不止一条 SELECT 语句的远程存储过程或存储过程使用服务器游标。请使用默认结果集或客户端游标。” 各位大姐.大哥有什么解决的方法没有啊.

贴一下你RPC的代码

SET QUOTED_IDENTIFIER ON  GO SET ANSI_NULLS ON  GO --Crm_TrimSalePlan_ciareanameb 2006,4,2006,5,2006,6,2006,7,1,1,1,1,1 CREATE             proc Crm_TrimSalePlan_ciareanameb                       @iyear int,                         @imonth int,                         @cyear int,                         @cmonth int,                         @cnyear int,                         @cnmonth int,                         @cnnyear int,                         @cnnmonth int,                          @isseries int,--是否选定中心                           @isrefrig int,--是否选定客户                           @ispower int,--是否选定系列                          @iskind int,--是否选定电源                          @isdrawid int--是否选定机型                          as             declare @strmonth varchar(2),@stryear varchar(5)           set @stryear=convert(char(4),@iyear)           if(@imonth<10)             set @strmonth='0'+convert(char(1),@imonth)           else             begin             set @strmonth=convert(char(2),@imonth)             end                    begin                                                  ---原来                              SELECT drawid,custname tshortname,areaname, sum(case when cmonth=@cmonth then aqty else 0 end) as cqty,   sum(case when cmonth=@cnmonth then aqty else 0 end) as cnqty, sum(case when cmonth=@cnnmonth then aqty else 0 end) as cnnqty                          into #aa FROM CrmTrimSalePlan WHERE iyear=@iyear and imonth=@imonth and                             yrevid=(SELECT MAX(yrevid) from CrmTrimSalePlan WHERE iyear=@iyear and imonth=@imonth)                                                       group by drawid,areaname,custname                                                                                                           ---年度  SELECT  drawid,tshortname,areacode,sum(veriqty) as iqty  into #bb                 from  crmshipplan,crmitem,crmcust  where  revid=          (SELECT max(revid) from crmshipplan WHERE shipdate like @stryear+'-'+@strmonth+'%')           and  shipdate like  @stryear+'-'+@strmonth+'%'             and  crmshipplan.itemid=crmitem.itemid          and   crmshipplan.custid=crmcust.custid   group by drawid,tshortname,areacode   select isnull(#aa.drawid,#bb.drawid) as drawid,        isnull(#aa.areaname,#bb.areacode) as areaname,        isnull(#aa.tshortname,#bb.tshortname) as tshortname,        isnull(cqty,0)/10000.0  as cqty,        isnull(cnqty,0)/10000.0  as cnqty,        isnull(cnnqty,0)/10000.0  as cnnqty,        isnull(iqty,0)/10000.0  as iqty into #cc  from #aa      full join #bb on #aa.drawid=#bb.drawid AND #aa.areaname=#bb.areacode and #aa.tshortname=#bb.tshortname select   #cc.areaname as direct,tshortname as series,refrkind as refrig,                             series as [power],  powerspec kind, kind drawid,cqty,cnqty,cnnqty,iqty into #dd from #cc,qrycrmitem WHERE #cc.drawid=qrycrmitem.drawid  select  isnull(a.sortcode,'')+'-'+direct as directs,        isnull(b.sortcode,'')+'-'+series as seriess,refrig, [power],kind,drawid, cqty,cnqty,cnnqty,iqty into #tt from #dd  left join crmbaseareasort a on areaname=direct left join crmbasecustsort b on shortname=series ----------获得华南sortcode  declare @sortcode varchar(10)  select @sortcode=sortcode from crmbaseareasort where areaname='华南' declare @sql varchar(8000),@temp varchar(500),@i int,@lastname varchar(20), @x int,@str varchar(5000), @strwhere varchar(1000), @strorder varchar(500),         @hwhere varchar(500), @hhwhere varchar(100) set @sql='' set @temp='directs' set @hwhere='a.itype,subString(a.directs,charindex(''-'',a.directs)+1,len(a.directs)) as direct' set @i=0 set @x=1 set @lastname='directs' set @str='' set @strorder='case when a.directs=''小计'' then ''最最'' else a.directs end' set @hhwhere=''''+@sortcode+'-华南总计'''  if @isseries=2     begin set @temp=@temp+',seriess' set @i=@i+1 set @lastname='seriess' set @strorder=@strorder+',case when a.seriess=''小计'' then ''最最'' else a.seriess end' set @hwhere=@hwhere+',subString(a.seriess,charindex(''-'',a.seriess)+1,len(a.seriess)) as series' set @hhwhere=@hhwhere+',null'     end  if  @isrefrig=2    begin set @temp=@temp+',refrig' set @i=@i+1 set @lastname='refrig' set @strorder=@strorder+',a.refrig' set @hwhere=@hwhere+',a.refrig' set @hhwhere=@hhwhere+',null'    end  if @ispower=2    begin set @temp=@temp+',[power]' set @i=@i+1 set @lastname='[power]'    set @strorder=@strorder+',a.[power]' set @hwhere=@hwhere+',a.[power]'  set @hhwhere= @hhwhere+',null'    end  if @iskind=2   begin set @temp=@temp+',kind' set @i=@i+1 set @lastname='kind'  set @strorder=@strorder+',a.kind' set @hwhere=@hwhere+',a.kind' set @hhwhere= @hhwhere+',null'    end  if @isdrawid=2   begin set @temp=@temp+',drawid' set @i=@i+1 set @lastname='drawid' set @strorder=@strorder+',a.drawid' set @hwhere=@hwhere+',a.drawid' set @hhwhere= @hhwhere+',null'    end set @hwhere=@hwhere+',iqty,cqty,crate,cnqty,cnrate,cnnqty,cnnrate'        set @sql=' select grouping('+@lastname+') as itype,'+@temp +',sum(iqty) iqty,sum(cqty) as cqty,' +'case when sum(iqty)=0 then 0 else sum(cqty)*100.0/sum(iqty) end as crate,' +'sum(cnqty) as cnqty,' +'case when sum(cqty)=0 then 0 else sum(cnqty)*100.0/sum(cqty) end as cnrate,' +'sum(cnnqty) as cnnqty,' +'case when sum(cnqty)=0 then 0 else sum(cnnqty)*100.0/sum(cnqty) end as cnnrate' +' into tempcrm1 from #tt group by ' +@temp +' with rollup' exec (@sql)       set @sql='select case when itype=1 and directs is not null then 2 else itype end as itype,'    +' case when itype=1 and directs is null then '' 总计'' else directs end as directs'       declare @beg int,@end int,@a int,       @strbeg varchar(20),       @strend varchar(20)       set @a=0       set @beg=1       set @end =1       set @strbeg=''       set @strend=''       set @x=@i       while @i>0 begin set @beg=charindex(',',@temp,@beg) set @strbeg=subString(@temp,@end,@beg-@end) if @i=1 begin      set @str=@str+',case when itype=1 and '+@strbeg+' is not null and ' +@lastname+' is null then ''小计'' else '+@lastname  +' end as '+@lastname end else begin set @end=charindex(',',@temp,@beg+1) set @strend=subString(@temp,@beg+1,@end-(@beg+1)) set @str=@str+',case when itype=1 and '+@strbeg+' is not null and ' +@strend+' is null then ''小计'' else '+@strend  +' end as '+@strend set @beg=@beg+1 set @end=@beg end set @i=@i-1 end set @sql=@sql+@str+',iqty,cqty,crate,cnqty,cnrate,cnnqty,cnnrate into tempcrm2 from tempcrm1' exec(@sql) drop table tempcrm1 set @sql='insert into tempcrm2 ' +' select 2 as itype,'+@hhwhere +',sum(iqty) iqty,sum(cqty) as cqty,' +'case when sum(iqty)=0 then 0 else sum(cqty)*100.0/sum(iqty) end as crate,' +'sum(cnqty) as cnqty,' +'case when sum(cqty)=0 then 0 else sum(cnqty)*100.0/sum(cqty) end as cnrate,' +'sum(cnnqty) as cnnqty,' +'case when sum(cnqty)=0 then 0 else sum(cnnqty)*100.0/sum(cnqty) end as cnnrate' +' from #tt where directs like ''%华南'' or directs like ''%集团内'''  exec(@sql)       set  @sql=' select '   +@hwhere+' from tempcrm2 a'   +' order by '   +@strorder          exec(@sql) drop table tempcrm2 end GO SET QUOTED_IDENTIFIER OFF  GO SET ANSI_NULLS ON  GO

顶啊。

已解决...等了几天唉.还是自己动手好.

估计是权限问题:

怎么解决的?分享一下吧。 没有细看你的程序,具体原因不好说,个人感觉把临时表改成CTE应该可以绕过这个问题。


上一篇:SQL Server 无法将“xxx”配置为分发服务器 100lcy_008]
下一篇:问个数据库的问题!! 10xinkong2008]

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款