永发信息网

请SQL高手帮我看下这个存储过程

答案:2  悬赏:10  手机版
解决时间 2021-07-19 16:00

有四个表 BASWL、 STOCK、 ColorMXB、 SizeMXB

其中 BASWL 有 WLID、 WLDH 、WLMCH 、WLLBID

STOCK 有 WLID 、SHL、 COLORID 、SIZEID

ColorMXB 有 MXID、 NAME

SizeMXB 有 MXID 、NAME

* GetFreeItem()是另一个存储过程可以查出KYSHL

其中 BASWL.WLID=STOCK.WLID STOCK.COLORID=COLORMXB.MXID

STOCK.SIZEID=SIZEMXB.MXID

我想查出 WLLBID= **** WLDH LIKE ‘%***%’对应的

WLDH WLMCH COLORMXB.NAME SIZEMXB.NAME SUM(SHL) KYSHL

我写的存储过程如下,当我查询 select * from getlbmx(1111,’%cc%’)时查到25个结果却用了21秒,求高手指点或写个简单的,谢谢

IF OBJECT_ID ('dbo.getlbmx') IS NOT NULL

DROp FUNCTION dbo.getlbmx

GO

CREATE FUNCTION getlbmx(@lbid INTEGER ,@wldh VARCHAr (10))

RETURNS @P TABLE(wldh VARCHAr (80),

wlmch VARCHAr (120),COLOR VARCHAr (80),

SIZE VARCHAr (80),

SHL numeric(24,8),

kyshl numeric(24,8) ) AS

BEGIN

DECLARE wlid CURSOR

FOR SELECT wlid FROM BASWL WHERe WLLBID = @lbid AND WLDH LIKE @wldh

OPEN wlid

DECLARE @id INT

FETCH next FROM wlid INTO @id while (@@fetch_status<>-1)

BEGIN

if(@id>0)

BEGIN

INSERT INTO @p (wldh,wlmch,Color,Size,shl,kyshl)

SELECt (SELECT WLDH FROM BASWL WHERe WLID = @ID) AS WLID,

(SELECt WLMCh FROM BASWL WHERe WLID =@ID) AS WLMCh,

(SELECt NAME FROM ColorMXB where MXID = a.colorid) AS Color,

(select NAME from SizeMXB where MXID=a.sizeid) as Size,

sum(SHL) as SHL ,

(select ShL from GetFreeItem() where WLID=@ID and colorID=a.colorid and sizeid=a.sizeid ) as KYSHL

from STOCK a where WLID=@ID

GROUP BY a.colorid ,a.sizeid

end

FETCH next FROM wlid INTO @id

END

CLOSE wlid

DEALLOCATE wlid

RETURN

end

GO

最佳答案
select WLDH,WLMCH,C.NAME,D.NAME,SUM(b.SHL),E.ShL AS KYSHL
from BASWL A left join STOCK B ON A.WLID=B.WLID
LEFT JOIN ColorMXB C ON B.COLORID=C.MXID
LEFT JOIN SizeMXB D ON B.SIZEID=D.MXID
LEFT JOIN GetFreeItem() E ON E.WLID=B.WLID AND E.COLORID=B.COLORID AND E.SIZEID=B.SIZEID
WHERe A.WLLBID IN (**** WLDH LIKE ‘%***%’)
GROUP BY WLDH,WLMCH,C.NAME,D.NAME,E.SHL
全部回答

不知道你的getibmx是怎么写的,前面的这样实现如何: select A.wldh,A.wlmch,C.Color,D.SIZE,sum(B.SHL) as SHL from

from BASWL A ,STOCK B ,ColorMXB C,SizeMXB D where A.WLID = B.WLID AND B.colorid = C.MXid AND B.sizeid = D.MXid

and a.wllbid = '

我的建议是,你后面的SQL语句最好使用连接,写在一个语句中,而不是把这个多的语句多分开来

同时,最好不要使用游标,游标是非常消耗SQL效率的

还有GetFreeItem这个存储过程,如果不是复杂的,最好就也是直接在SQL语句中得到结果

查询的结果最后直接有存储过程来完成,而不是用语句select * from getlbmx(

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
怎么样下载Q拼音输入法?
怎么用高压锅做扁豆猪脚汤
朋友问我‘河北唐山为什么高楼少’怎么回答好
狮子有哪些特点,狮子的特点是什么
电影名中有狗字的香港电影有哪些?
车牌摇号是什么意思,河北保定有可能摇号吗
河南5一整套『暗黑城银刃』重甲多少钱YXB
湖南省机动车驾驶人科目一考试标准题库电子书
冒险岛勇士部落绿蘑菇哪里有?
出现发热 头痛 后背肌肉酸痛 胸口憋闷.这是 H
安全系统出了问题,修复不了,要怎么办?
问道体力金怎么加点
使用双线桥表示的时候有什么不能隔价得失电子
QQ英雄岛,三档分解材料有什么用?
烽火中战斗详情中有负伤的兵怎么直接死了 没
推荐资讯
日本出产的SONY手机1G或2G内存卡多少钱一张?
一年级写一句话怎么写,一年级姓名怎么造句
qq农场在那下啊
何为文艺复兴,何为启蒙思想?
怎么寻找真心朋友?
圣经的含义,<<圣经>>的意义与价值?
sat 阅读原著对sat那种现象评论类的文章很感
怎样洗带钢圈的胸罩不会变形?
梦幻诛仙怎么制作饰品..烹饪..武器。。
1瓶氧气多少立方?1瓶乙炔多少立方?
请问漳州这边的统一奶茶进货价一般多少?(一
我是1992年农历2月13出生的?请问我的塔罗牌是
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?