请帮忙啊,我的存储过程出问题了,出错提示是[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionCheckForData (CheckforData()).
ALTER procedure SaleOderDetailReport @UpperDate datetime, @LowerDate datetime
as
SELECT dbo.TAT004.SuiteNm, dbo.TAT004.SaleDt, dbo.TAT004.SaleNo, dbo.TAT004.DeptNo, dbo.TAF066.DeptNm, dbo.TAT004.EmpNo,
dbo.TAF074.EmpNm, dbo.TAT004.CustNo,dbo.TAF071.CustNm,
--货结否
dbo.TAT004.SaleSum, --订单金额
dbo.TAT004.AMT, --出库金额
skje = (SELECT sum(dbo.TAT001.AMT) --收款金额
FROM dbo.TAT003 LEFT OUTER JOIN
dbo.TAT001 ON dbo.TAT003.OutStNo = dbo.TAT001.PS_NO AND
dbo.TAT003.SuiteNm = dbo.TAT001.SuiteNm where isnull(dbo.TAT003.MoneyVerifyNo, '') <> ''
and dbo.TAT003.saleNo = dbo.TAT004.saleNo),
qkje = isnull(dbo.TAT004.amt, 0) - isnull((SELECT sum(dbo.TAT001.AMT) --欠款金额
FROM dbo.TAT003 LEFT OUTER JOIN
dbo.TAT001 ON dbo.TAT003.OutStNo = dbo.TAT001.PS_NO AND
dbo.TAT003.SuiteNm = dbo.TAT001.SuiteNm where isnull(dbo.TAT003.MoneyVerifyNo, '') <> ''
and dbo.TAT003.saleNo = dbo.TAT004.saleNo ), 0),
hjf = case when isnull((select sum(isnull(tat005.Num, 0)) from tat005 where tat005.saleNo = tat004.saleNo), 0)
- isnull((SELECT sum(dbo.TAT001.num)
FROM dbo.TAT003 LEFT OUTER JOIN
dbo.TAT001 ON dbo.TAT003.OutStNo = dbo.TAT001.PS_NO AND
dbo.TAT003.SuiteNm = dbo.TAT001.SuiteNm where isnull(dbo.TAT003.MoneyVerifyNo, '') <> ''
and dbo.TAT003.saleNo = dbo.TAT004.saleNo ), 0) = 0 then 'Y' else 'N' end,
--款结否
kjf = case when dbo.TAT004.amt - (SELECT sum(dbo.TAT001.AMT)
FROM dbo.TAT003 LEFT OUTER JOIN
dbo.TAT001 ON dbo.TAT003.OutStNo = dbo.TAT001.PS_NO AND
dbo.TAT003.SuiteNm = dbo.TAT001.SuiteNm where isnull(dbo.TAT003.MoneyVerifyNo, '') <> ''
and dbo.TAT003.saleNo = dbo.TAT004.saleNo ) = 0 then 'Y' else 'N' end ,
--票结否
pjf = case when isnull((select count(*) from dbo.TAT003 where isnull(dbo.TAT003.InvVerifyNo, '') = ''
and dbo.TAT003.SuiteNm = dbo.TAT004.SuiteNm and dbo.TAT003.SaleNo = dbo.TAT004.SaleNo), 0) = 0 then 'Y' else 'N' end
FROM dbo.TAT004 LEFT OUTER JOIN
dbo.TAF071 ON dbo.TAT004.SuiteNm = dbo.TAF071.SuiteNm AND
dbo.TAT004.CustNo = dbo.TAF071.CustNo LEFT OUTER JOIN
dbo.TAF074 ON dbo.TAT004.EmpNo = dbo.TAF074.EmpNo LEFT OUTER JOIN
dbo.TAF066 ON dbo.TAT004.DeptNo = dbo.TAF066.DeptNo
where convert(char(8), dbo.tat004.SaleDt, 112) between convert(char(8), @UpperDate, 112)
and convert(char(8), @LowerDate, 112)
问题点数:0、回复次数:10Top
1 楼oldfoxtan(小猫熊)回复于 2003-08-02 09:43:30 得分 0
1。如果注释掉最后的where convert(char(8), dbo.tat004.SaleDt, 112) between convert(char(8), @UpperDate, 112)
and convert(char(8), @LowerDate, 112)则整个过程运行正常
2。如果把hjf = case when isnull((select sum(isnull(tat005.Num, 0)) from tat005 where tat005.saleNo = tat004.saleNo), 0)
- isnull((SELECT sum(dbo.TAT001.num)
FROM dbo.TAT003 LEFT OUTER JOIN
dbo.TAT001 ON dbo.TAT003.OutStNo = dbo.TAT001.PS_NO AND
dbo.TAT003.SuiteNm = dbo.TAT001.SuiteNm where isnull(dbo.TAT003.MoneyVerifyNo, '') <> ''
and dbo.TAT003.saleNo = dbo.TAT004.saleNo ), 0) = 0 then 'Y' else 'N' end,
的where tat005.saleNo = tat004.saleNo注释掉而不注释第1。也能正常运行Top
2 楼txlicenhe(马可)回复于 2003-08-02 11:11:06 得分 0
friendly upTop
3 楼Rivulet119(黑眼睛)回复于 2003-08-02 11:18:16 得分 0
语句太复杂了,为什么不用变量判断呀?Top
4 楼CrazyFor(冬眠的鼹鼠)回复于 2003-08-02 17:04:33 得分 0
存储过程语法检查有没有问题???Top
5 楼zjcxc(邹建)回复于 2003-08-02 21:57:44 得分 0
复制到查询分析器中执行,看是否能够正常运行.Top
6 楼zjcxc(邹建)回复于 2003-08-02 21:59:16 得分 0
前段时间看个一个贴子,因为楼主的视图过于复杂.最终导致不能执行.
但将视图处理的中间结果生成临时表,再接着处理,就能正确.
你说去掉最后的条件能正常执行,不知道是否也和这个情况类似.Top
7 楼pengdali()回复于 2003-08-02 22:28:39 得分 0
语法正确,属于逻辑错误,一点一点注释掉差出问题。Top
8 楼oldfoxtan(小猫熊)回复于 2003-08-03 14:48:10 得分 0
我也是无可奈何啊,需求和算法都是需求人员给我的,并且我只能照着写,而不能改任何东西!Top
9 楼oldfoxtan(小猫熊)回复于 2003-08-03 15:01:55 得分 0
to CrazyFor(太阳下山明朝依旧爬上来)兄 和 zjcxc(邹建)兄 ,正如 pengdali(大力 V2.0) 兄所说的语法是没有任何问题的!!因为该过程已经运行了一个多月了,并且是正确的,但在1号下午(应该是插入了一些数据之后)之后就不行了,我怀疑是数据的问题(数据表的结构我也不是很清楚,因为结构是由另外的人建的)。
现在问题我使用了另一种方法解决,解决的方法是把select * into #t2 from dbo.tat004 where convert(char(8), dbo.tat004.SaleDt, 112) between convert(char(8), @UpperDate, 112)
之后使用#2在下面的计算查询过程中代替dbo.tat004 做连接,就可以达到“1。如果注释掉最后的where convert(char(8), dbo.tat004.SaleDt, 112) between convert(char(8), @UpperDate, 112)
and convert(char(8), @LowerDate, 112)则整个过程运行正常”
所说的了!
引发错误的原因我做了很多测试,但到目前为止还是未找到!!!
Top



