MyException - 我的异常网
当前位置:我的异常网» Sql Server » 存储过程在查询分析器中一秒获取结果,而在VB6中等

存储过程在查询分析器中一秒获取结果,而在VB6中等几分钟都是无响应(2)

www.myexceptions.net  网友分享于:2013-04-10  浏览:12次

sum(case B_Process when '后处理' then B_FactSum else 0 end) +
sum(case B_Process when '洗缸' then B_FactSum else 0 end) +
sum(case B_Process when '冲缸' then B_FactSum else 0 end) +
sum(case B_Process when '剥色' then B_FactSum else 0 end) +
sum(case B_Process when '落水' then B_FactSum else 0 end) as B_FactSum,

@m_SDate as 起始日期,
@m_EDate as 终止日期,
Convert(varchar(100),GetDate(),20) as B_PrintDate
from 
(

Select B_Pople as B_People,B_Process,
sum(ISNULL(B_Volume,0)) as B_Volume,sum(ISNULL(B_Volume,0)) * G_CJPriceYR.B_Price as B_FactSum
From
(
Select G_YRBill.B_GangHao,G_YRBill.B_Pople,G_YRBill.B_Date,
G_YRBill.B_Rate,G_YRBill.B_Process,
G_YRBill.B_Rate * 0.1 * G_YRGang.B_OutPut as B_Volume
From G_YRBill,G_YRGang
Where 1=1
And G_YRBill.B_GangHao=G_YRGang.B_GangHao
And G_YRBill.B_Date Between cast(@m_SDate as datetime) And cast(@m_EDate as datetime)
And B_VolumeValidPeople=1
And G_YRBill.B_GangHao<>'上中'
And G_YRBill.B_GangHao<>'下中'


And G_YRBill.B_ID Not In
(
--时间段内所有公斤数<50公斤的
Select B_ID
From
(
Select G_YRBill.B_ID,
dbo.[GetQtyFact](G_YRBillDetailBarCode.B_BarCode) as B_Qty
From G_YRBill,G_YRGang,G_YRBillDetailBarCode
Where 1=1
And G_YRBill.B_GangHao=G_YRGang.B_GangHao
And G_YRBill.B_Date Between cast(@m_SDate as datetime) And cast(@m_EDate as 

datetime)
And B_VolumeValidPeople=1
And G_YRBill.B_GangHao <>'上中'
And G_YRBill.B_GangHao <>'下中'
And G_YRBill.B_ID=G_YRBillDetailBarCode.B_ID
) as P
Where isnull(P.B_Qty,0)<50
)



) as P Left Outer Join G_CJPriceYR 
ON G_CJPriceYR.B_Type='非中样'
And G_CJPriceYR.B_ProcessName=P.B_Process

Group by B_Pople,B_Process,G_CJPriceYR.B_Price
)  as P Left Outer Join G_YRPeople
ON P.B_People=G_YRPeople.B_Name
Group by B_People,ISNULL(G_YRPeople.B_Class,'')
Order By ISNULL(G_YRPeople.B_Class,''),B_People


END



















------解决方案--------------------
你的VB代码能确保没有任何人改动过?
------解决方案--------------------
“查询分析器中快,程序中调用慢。” 
有可能是参数嗅探问题,也有可能被缓存的计划刚好是一个比较差的计划,
你在优化器中是怎么查的? 用
exec dbo.S_GetYRReportVolumePeopleWage '2013-03-01','07:00:00','2013-03-31','07:00:00来查询的,还是直接把参数替代为具体值,然后直接执行SP里的T-SQL ?
------解决方案--------------------
引用:
问题找到了,在
--时间段内所有公斤数<50公斤的
下面的代码出的问题
NOT IN的问题
无奈先采用了中间表的办法解决了,
速度很快。

那么这样的NOT IN,如果不采用中间表应该怎么做 ?

改成not exists看看
------解决方案--------------------
引用:

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有