大侠帮看看这个存储过程的调用
存储过程如下:
CREATE PROCEDURE sp_yszkzl
@zl1 int,
@zl2 int,
@zl3 int,
@zl4 int,
--@zl5 int ,
@b_date datetime,
@e_date datetime,
@stat varchar(400)--统计条件
AS
create table #hwzl(fhid varchar(10)primary key,rq smalldatetime,pq varchar(10),rybm varchar(8),ryxm varchar(8),khid varchar(10),khmc varchar(40),je numeric(9,2),
zk1 numeric(9,2),zk2 numeric(9,2),zk3 numeric(9,2),zk4 numeric(9,2),zk5 numeric(9,2) )
begin
Declare @S_SQL As VarChar(8000)
Declare @S_NSQL As NvarChar(4000)
set @S_SQL='insert into #hwzl(fhid,rq,pq,rybm,ryxm,khid,khmc,je)
select fhid,rq,pq,rybm,ryxm,khid,khmc,sum(hkjcje) from hwdz where hkjcje>0
group by fhid,pq,rq,rybm,ryxm,khid,khmc'
Set @stat = ISNULL(@stat,'')
If Len(LTrim(RTrim(@stat))) > 0
Begin
Set @S_SQL = LTrim(RTrim(@S_SQL)) + ' having ' + LTrim(RTrim(@stat))
Set @S_NSQL = Cast(@S_SQL As NVarChar(4000))
Exec sp_executesql @S_NSQL
end
else
begin
Set @S_SQL = LTrim(RTrim(@S_SQL))
Set @S_NSQL = Cast(@S_SQL As NVarChar(4000))
Exec sp_executesql @S_NSQL
end
end
update #hwzl
set zk1=(select #hwzl. je from #hwzl,hwdz where @e_date - #hwzl.rq<=@zl1 and #hwzl.fhid=hwdz.fhid),
zk2= ( select #hwzl. je from #hwzl,hwdz where @e_date - #hwzl.rq<=@zl2 and @e_date -#hwzl.rq>@zl1 and #hwzl.fhid=hwdz.fhid),
zk3= (select #hwzl. je from #hwzl,hwdz where @e_date - #hwzl.rq<=@zl3 and @e_date -#hwzl.rq>@zl2 and #hwzl.fhid=hwdz.fhid),
zk4= ( select #hwzl. je from #hwzl,hwdz where @e_date - #hwzl.rq<=@zl4 and @e_date - #hwzl.rq>@zl3 and #hwzl.fhid=hwdz.fhid),
zk5= (select #hwzl. je from #hwzl,hwdz where @e_date - #hwzl.rq>@zl4 and #hwzl.fhid=hwdz.fhid)
select *from #hwzl
--drop table #hwzl
GO
上面的存储过程在查询分析器中执行没问题。但在pb中如下调用后出错:
DECLARE yszkzl PROCEDURE FOR sp_yszkzl
@l_zk1 = 30,
@l_zk2 = 60,
@l_zk3 = 90,
@l_zk4 = 120,
@b_date = :d1 ,
@e_date = :d2,
@s_state = :tjparm1
using sqlca;
sqlca.autocommit=true
execute yszkzl ;
sqlca.autocommit=false
close yszkzl;
dw_1.retrieve(yqzk1,yqzk2,yqzk3,yqzk4,d1,d2,tjparm1)//d1,d2,tjparm1是没问题的参数。
出错提示如下:
datawindow error:
select error:无法将null值插入列‘zk5’,表'tempdb.dbo.#hwzl___';该列不允许空值,insert失败。
问题点数:50、回复次数:3Top
1 楼ropriest(馆主)回复于 2003-11-02 10:17:47 得分 0
单独执行select #hwzl. je from #hwzl,hwdz where @e_date - #hwzl.rq>@zl4 and #hwzl.fhid=hwdz.fhid,可能是你的查询数据zk5有空值的情况。
可以在zk5= (select #hwzl. je from ……的后面再加上一句:
select zk5 = IsNull(zk5,0)看看
Top
2 楼ropriest(馆主)回复于 2003-11-02 10:20:08 得分 50
如果有空值,把语句zk5= (select #hwzl. je from ……)改成:
zk5 = IsNull((select #hwzl. je from ……),0)Top
3 楼chenhaijiang(迷惘)回复于 2003-11-02 11:50:51 得分 0
问题解决。是pb的问题。Top




