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语句