一个MSSQL2000奇怪的现象!

linbz 2003-04-08 09:38:46
我的以下代码在查询分析器里调试只需要不到1秒种就完成了,但是把它做成存储过程却有可能超时,
而且它们的执行计划的步骤完全不一样!望高手指点,谢谢!

DECLARE @Date1 DATETIME,@Date2 DATETIME,@LadCode CHAR(10)
SET @Date1='2003-4-8 00:00:00'
SET @Date2='2003-4-8 23:59:59'
SET @LadCode='%'
SELECT
CAST(A.提货单号 AS CHAR(10)) 提货单号,vc_Name 规格型号,提货数量,de_Weight 发货数量,提货数量-de_Weight 提货量差,
100-ROUND((提货数量 - de_Weight) / 提货数量 * 100, 3) '完成率(%)',开票时间
FROM
(SELECT
提货单号,c_Code,vc_Name,开票时间,SUM(提货数量) 提货数量
FROM
yxzx.销售传票表 A
INNER JOIN
yxzx.销售传票附表 B
ON
A.传票号=B.传票号
INNER JOIN
OutPutCode C
ON
B.品种代码=C.c_OldCode
WHERE
(A.开票时间>=@Date1 AND A.开票时间<=@Date2) AND B.提货数量<>0
GROUP BY
提货单号,c_Code,vc_Name,开票时间
) A
LEFT JOIN
(SELECT
vc_LadCode,c_OutPutCode,SUM(de_Weight) de_Weight
FROM
SteelCon SC
INNER JOIN
SteelConSub SCS
ON
SC.vc_ConDoc=SCS.vc_ConDoc
WHERE
d_DateTime>=@Date1
GROUP BY
vc_LadCode,c_OutPutCode
UNION
SELECT
vc_LadCode,c_OutPutCode,SUM(de_Weight) de_Weight
FROM
SteelLinCon SC
INNER JOIN
SteelLinConSub SCS
ON
SC.vc_ConDoc=SCS.vc_ConDoc
WHERE
d_DateTime>=@Date1 AND d_DateTime<=@Date2+2
GROUP BY
vc_LadCode,c_OutPutCode
) B
ON
A.提货单号=B.vc_LadCode AND A.c_Code=B.c_OutPutCode
WHERE
A.提货单号 LIKE RTRIM(@LadCode)
...全文
41 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
netdreamingboy 2003-04-09
  • 打赏
  • 举报
回复
有分别的
查询分析器直接可以把数据输出,不需要存储在某个空间里
而存储过程查找的数据是需要存储在某个空间里面的
速度是肯定要慢一点的
linbz 2003-04-09
  • 打赏
  • 举报
回复
不但速度慢,而且执行的步骤也不一样!怪!
linbz 2003-04-08
  • 打赏
  • 举报
回复
为什么在查询分析器里执行速度很快???????????????????????????
j9988 2003-04-08
  • 打赏
  • 举报
回复
那就两个子查询分开,单独建过程,

先看看那一句慢,出问题了。
linbz 2003-04-08
  • 打赏
  • 举报
回复
参数没有问题!用存储过程执行很慢,但还是能执行成功!
j9988 2003-04-08
  • 打赏
  • 举报
回复
大力有理有理
pengdali 2003-04-08
  • 打赏
  • 举报
回复
是参数有问题吧!你把参数,在过程里面给值,试试
j9988 2003-04-08
  • 打赏
  • 举报
回复
然后把第二句的union 改成union all
j9988 2003-04-08
  • 打赏
  • 举报
回复
两个子查询分开,单独建过程,
先看看那一句出问题了。

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧