速度太慢了 这个存储过程如何优化

shenbulongtongyaoyao shenbulongtongyaoyao 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
CREATE             proc dbo.UP_RcptMng_DC_Login
@Para_ID int,
@Para_REQDATE datetime,
@Para_SuppCD int,
@Para_RESISTTIME datetime,
@Para_RCPTMNGSTATUS int
as
declare @InspDate datetime
declare @ProductCD varchar(13)
begin
-----------------------------------------------------------------
declare Product_cursor cursor
for
select
-- @InspDate=INSPDATE ,
-- @ProductCD = PRODUCTCD
INSPDATE,
PRODUCTCD
from
DBMainStream.dbo.TB_VENDORSTOCK
where
PURSTATUS in(0,1)
and
WORKFLOWREPRECD=10
and
convert(varchar(10),REQDATE,120) like convert(varchar(10),@Para_REQDATE,120)
and
SUPPCD = @Para_SuppCD
and
CONVERT(char(24),RESISTTIME,120) = CONVERT(char(24),@Para_RESISTTIME,120)
and
RCPTMNGSTATUS = @Para_RCPTMNGSTATUS
open Product_cursor
fetch next from Product_cursor
into @InspDate,@ProductCD
while @@fetch_status = 0
begin
if exists
(
select null
from DBHTSystem.dbo.TB_ARRIVINSPREADY
where
convert(varchar(10),InspDate,120) like convert(varchar(10),@InspDate,120)
and
ProductCD=@ProductCD
and
SuppCD=@Para_SuppCD
and
convert(varchar(10),REQDATE,120) like convert(varchar(10),@Para_REQDATE,120)
)
begin
update
DBHTSystem.dbo.TB_ARRIVINSPREADY
set
OrderQty = OrderQty + (
select OrderQty
from
(
SELECT
k.INSPDATE,
k.PRODUCTCD,
k.SUPPCD,
k.REQDATE as ReqDate,
k.CASEINUNIT,
k.PRODUCTNAME,
sum(k.REQQTY) as OrderQty,
isnull(k.ITFCD,'') as ITFCD,
k.DIVISIONCD
,k.DEPARTMENTCD,
k.LINECD,
k.SUPPNAME,
k.WAREHOUSECD,
k.MAKERCD,
case
when lm.productcd is null or (lm.ShapeStatusCD=0 and lm.productcd is not null)
then 0
else 1
end as ProcPropertyRegType,
1 as ConsignerDivision,
@Para_ID as Auther,
getdate() as ResistTime
FROM
DBMainStream.dbo.TB_VENDORSTOCK k
left join
DBLocalMaster.dbo.LMST_WAREHOUSEPRODUCTS lm
on
lm.PRODUCTCD=k.PRODUCTCD
where
k.PRODUCTCD=@ProductCD
and
k.PURSTATUS in(0,1)
and
k.WORKFLOWREPRECD=10
and
convert(varchar(10),k.REQDATE,120) like convert(varchar(10),@Para_REQDATE,120)
and
k.SUPPCD = @Para_SuppCD
and
CONVERT(char(24),k.RESISTTIME,120) = CONVERT(char(24),@Para_RESISTTIME,120)
and
k.RCPTMNGSTATUS = @Para_RCPTMNGSTATUS
-- and not exists(
-- select tba.INSPDATE,
-- tba.PRODUCTCD,
-- tba.SUPPCD
-- from
-- DBHTSystem.dbo.TB_ARRIVINSPREADY as tba
-- where
-- k.INSPDATE=tba.INSPDATE
-- and
-- k.PRODUCTCD=tba.PRODUCTCD
-- and
-- k.SUPPCD=tba.SUPPCD
-- and
-- k.REQDATE=tba.ReqDate
-- )
group by
k.inspdate,
k.productcd,
k.suppcd,
k.REQDATE,
k.CaseInUnit,
k.productname,
k.ITFCD,
k.DivisionCD,
k.DepartmentCD,
k.LineCD,
k.SUPPNAME,
k.warehousecd,
k.MakerCD,
k.productcd,
lm.productcd,
lm.ShapeStatusCD
) as du

),
Auther = @Para_ID,
ResistTime =getdate()

end
else
begin
INSERT INTO DBHTSystem.dbo.TB_ARRIVINSPREADY
(InspDate,
ProductCD,
SuppCD,
ReqDate,
CaseInUnit,
ProductName,
OrderQty,
ITFCD,
DivisionCD,
DepartmentCD,
LineCD,
SuppName,
WarehouseCD,
MakerCD,
ProcPropertyRegType,
ConsignerDivision,
Auther,

ResistTime
)
SELECT
k.INSPDATE,
k.PRODUCTCD,
k.SUPPCD,
k.REQDATE as ReqDate,
k.CASEINUNIT,
k.PRODUCTNAME,
sum(k.REQQTY) as OrderQty,
isnull(k.ITFCD,'') as ITFCD,
k.DIVISIONCD
,k.DEPARTMENTCD,
k.LINECD,
k.SUPPNAME,
k.WAREHOUSECD,
k.MAKERCD,
case
when lm.productcd is null or (lm.ShapeStatusCD=0 and lm.productcd is not null)
then 0
else 1
end as ProcPropertyRegType,
1 as ConsignerDivision,
@Para_ID as Auther,
getdate() as ResistTime
FROM
DBMainStream.dbo.TB_VENDORSTOCK k
left join
DBLocalMaster.dbo.LMST_WAREHOUSEPRODUCTS lm
on
lm.PRODUCTCD=k.PRODUCTCD
where
k.PRODUCTCD=@ProductCD
and
k.PURSTATUS in(0,1)
and
k.WORKFLOWREPRECD=10
and
convert(varchar(10),k.REQDATE,120) like convert(varchar(10),@Para_REQDATE,120)
and
k.SUPPCD = @Para_SuppCD
and
CONVERT(char(24),k.RESISTTIME,120) = CONVERT(char(24),@Para_RESISTTIME,120)
and
k.RCPTMNGSTATUS = @Para_RCPTMNGSTATUS
-- and not exists(
-- select tba.INSPDATE,
-- tba.PRODUCTCD,
-- tba.SUPPCD
-- from
-- DBHTSystem.dbo.TB_ARRIVINSPREADY as tba
-- where
-- k.INSPDATE=tba.INSPDATE
-- and
-- k.PRODUCTCD=tba.PRODUCTCD
-- and
-- k.SUPPCD=tba.SUPPCD
-- and
-- k.REQDATE=tba.ReqDate
-- )
group by
k.inspdate,
k.productcd,
k.suppcd,
k.REQDATE,
k.CaseInUnit,
k.productname,
k.ITFCD,
k.DivisionCD,
k.DepartmentCD,
k.LineCD,
k.SUPPNAME,
k.warehousecd,
k.MakerCD,
k.productcd,
lm.productcd,
lm.ShapeStatusCD

end
fetch next from Product_cursor
into @InspDate,@ProductCD
end
close Product_cursor
DEALLOCATE Product_cursor
--★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

insert into DBMainStream.dbo.TB_RESULTRCPTMNG_DC
(
Auther,
ConsignerDivision,
CREATETIME,
InspDate,
Maintainer,
ModifyTime,
RCPTMngStatus,
ReqDate,
ResistTime,
SuppCD,
WAREHOUSECD
)
select
distinct
AUTHER,
1,
RESISTTIME,
INSPDATE,
@Para_ID,
getdate(),
2,
REQDATE,
RESISTTIME,
SUPPCD,
WAREHOUSECD
from
DBMainStream.dbo.TB_VENDORSTOCK
where
convert(varchar(10),REQDATE,120) like convert(varchar(10),@Para_REQDATE,120)
and
SUPPCD = @Para_SuppCD
and
CONVERT(char(24),RESISTTIME,120) = CONVERT(char(24),@Para_RESISTTIME,120)
and
RCPTMNGSTATUS = @Para_RCPTMNGSTATUS

update DBMainStream.dbo.TB_VENDORSTOCK
set
RCPTMNGSTATUS=2,
MAINTAINER = @Para_ID,
MODIFYTIME = getdate()
where
convert(varchar(10),REQDATE,120) like convert(varchar(10),@Para_REQDATE,120)
and
SUPPCD = @Para_SuppCD
and
CONVERT(char(24),RESISTTIME,120) = CONVERT(char(24),@Para_RESISTTIME,120)
and
RCPTMNGSTATUS = @Para_RCPTMNGSTATUS
end
go
--★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
...全文

相关推荐

评论 11
收藏 已收藏
分享
返回顶部
shenbulongtongyaoyao
MS-SQL Server 34,876 成员 254,635 内容