首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

does not return a result set,该怎么解决

2012-04-01 
does not return a result set存储过程如下/*发票核对,业务部导出已经开出发票的记录交给销售分公司的功能

does not return a result set
存储过程如下

/*
发票核对,业务部导出已经开出发票的记录交给销售分公司的功能
hyc2011-1-18

exec up_expInvoice_Mainselect '深圳销售分公司(一部)','','','','',1,'2011-3-1','2011-3-12','hyc'
*/
CREATE proc up_expInvoice_Mainselect
(
@company varchar(200),--销售分公司
@khbh varchar(200)=null,--客户编号
@khdm varchar(200)=null,--客户代码
@khmc varchar(200)=null,--客户名称
@nkxh varchar(200)=null,--纽扣型号
@dateflag bit,--使用日期标记
@ckrq1 varchar(200),--出库日期
@ckrq2 varchar(200),
@userid varchar(200)=null
)
as
begin
  declare @sql varchar(8000)
  set @sql=''
if @company<>''
begin
  set @sql=@sql + '
select a.fCustNo into #khdm /*得到该销售分公司的所有客户代码*/
from GCS..tb_custtable a join GCS..tb_ConsigneeTable b on a.fConUnitNo=b.fID
where b.fConUnitName=''' + @company + ''''
-----------加入以下圈着的代码,delphi前台调用该存储过程就出does not return a result set的错误
  set @sql=@sql + 'delete from t_zfdtmp where userid=''' + @userid + '''
insert into t_zfdtmp(company,khmc,khdm,kdrq,amount,isaudited,audituser,audittime,remark,userid)
select company,khmc,khdm,kdrq,amount,isaudited,audituser,audittime,remark,''' +@userid+'''
from t_zhengfudan where khdm in (select fCustNo from #khdm)'
--判断时间是否为空,加上时间条件
if @dateflag=1 
  set @sql=@sql + ' and kdrq>=''' + @ckrq1 + ''' and kdrq<''' + @ckrq2 + ''''



----------------------注释掉该代码就delphi就能正常执行
exec up_expInvoice_Mainselect '深圳销售分公司(一部)','','','','',1,'2011-3-1','2011-3-12','hyc'
直接在查询分析器里可以返回记录集

end


  set @sql=@sql + '

  select t.*,t.ckje + t.jj as hjje from t_IssueInvoiceMainBAK t where 1=1'
if @company<>''
  set @sql=@sql + '
  and khdm in (select fCustNo from #khdm)'
if @khdm<>'' 
  set @sql=@sql + '
  and khdm like ''' + @khdm + '%'''

if @khmc<>''
  set @sql=@sql + '
  and khmc like ''' + @khmc + '%''' 

if @khbh<>''
  set @sql=@sql + '
  and khbh like ''' + @khbh + '%'''

if @nkxh<>''
  set @sql=@sql + '
  and nkxh like ''' + @nkxh + '%'''

if @dateflag=1
  set @sql=@sql + '
  and ckrq>=''' + @ckrq1 +''' and ckrq<''' + @ckrq2 + ''''
print(@sql)
exec(@sql)
end
GO


[解决办法]
要返回数据集,必须以Select 语句结束。
本人处理这种情况时通常会使用sql Server内部临时表
if object_id('#CurRMAutos') is not null Begin
drop table #CurRMAutos
End

create table #CurRMAutos
( ID int IDENTITY (1,1) not null,
AutoDPH varchar(30),
RMType varchar(30),
LCorShiJian varchar(30),
Red int
primary Key(ID));
//在Execute的SQL语句中使用 Insert Into #CurRMAutos(Field1,...) select ... 临时表
最后:select * from #CurRMAutos
[解决办法]
sql只支持返回最后的select数据集 ,意思就是 要想返回数据集,那么查询必须是最后的语句。
你先select 后delete 肯定不行的。就是这个问题
[解决办法]
检查过最后的得到的SQL语句

热点排行