WarlockSoul
February 2nd, 2005, 09:48 AM
Dear Guru's,
I'm creating a store procedure, in MS SQL 2k, that will run on a set date each week and e-mail the results.
If I explicitly declare the the start and finish dates the query returns the results in just over 1 minute (eg. VBAK.ERDAT Between '20050124' and '20050128')
I have declare some variables to try make the store procedure intuitive eg. on Monday grab the data from the previous weeks orders (eg. VBAK.ERDAT Between @sMyStart and @sMyFinish) and the query now takes 7 minutes.
I've looked thru the Online Book and can't seem to find anything that helps. VBAK.ERDAT is defined as Varchar(8) in the database.
Below is the code.
Thanks for any help.
Set NoCount On
Set DateFirst 1
Declare @sStartDate DateTime, @iDaySteps Int, @sAgent Varchar(20), @sMyStart Varchar(8), @sMyFinish Varchar(8)
Set @sStartDate = GetDate() - (DatePart(dw, GetDate()) + 6)
Set @iDaySteps = 1
Set @sMyStart = Convert(Varchar(8), @sStartDate, 112)
Set @sMyFinish = Convert(Varchar(8), @sStartDate + (DatePart(dw, @sStartDate) + 3),112)
Delete From T151T
Delete From tempOrders
Insert Into T151T
Select * From OpenQuery
(WMAN,
'Select * From T151T Where MANDT In (''400'') and SPRAS In (''E'') Order By T151T.KTEXT'
)
Insert Into tempOrders
Select
T151T.KTEXT,
VBAK.ERDAT,
Count(Distinct(VBAK.VBELN)),
Sum(VBAP.NETWR)
From VBAP
Inner Join VBAK on (VBAP.MANDT = VBAK.MANDT and VBAP.VBELN = VBAK.VBELN)
Inner Join (Select * From OpenQuery
(WMAN,
'Select KNVV.KUNNR as ''kunnr'', KNVV.KDGRP as ''kdgrp'' From KNVV'
)
) knvv On (VBAK.KUNNR = knvv.kunnr)
Inner Join (Select * From OpenQuery
(WMAN,
'Select T921.VBELN as ''vbeln'', T921.POSNR as ''posnr'' From T921'
)
) t921 On (Right(VBAP.VBELN,6) = Right(t921.vbeln,6) and VBAP.POSNR = t921.posnr)
Inner Join T151T on (knvv.kdgrp = T151T.KDGRP)
Where VBAK.AUART In ('TA') and VBAK.ERDAT Between @sMyStart and @sMyFinish and T151T.KDGRP Not In ('99')
Group By T151T.KTEXT, VBAK.ERDAT
Order By T151T.KTEXT, VBAK.ERDAT
I'm creating a store procedure, in MS SQL 2k, that will run on a set date each week and e-mail the results.
If I explicitly declare the the start and finish dates the query returns the results in just over 1 minute (eg. VBAK.ERDAT Between '20050124' and '20050128')
I have declare some variables to try make the store procedure intuitive eg. on Monday grab the data from the previous weeks orders (eg. VBAK.ERDAT Between @sMyStart and @sMyFinish) and the query now takes 7 minutes.
I've looked thru the Online Book and can't seem to find anything that helps. VBAK.ERDAT is defined as Varchar(8) in the database.
Below is the code.
Thanks for any help.
Set NoCount On
Set DateFirst 1
Declare @sStartDate DateTime, @iDaySteps Int, @sAgent Varchar(20), @sMyStart Varchar(8), @sMyFinish Varchar(8)
Set @sStartDate = GetDate() - (DatePart(dw, GetDate()) + 6)
Set @iDaySteps = 1
Set @sMyStart = Convert(Varchar(8), @sStartDate, 112)
Set @sMyFinish = Convert(Varchar(8), @sStartDate + (DatePart(dw, @sStartDate) + 3),112)
Delete From T151T
Delete From tempOrders
Insert Into T151T
Select * From OpenQuery
(WMAN,
'Select * From T151T Where MANDT In (''400'') and SPRAS In (''E'') Order By T151T.KTEXT'
)
Insert Into tempOrders
Select
T151T.KTEXT,
VBAK.ERDAT,
Count(Distinct(VBAK.VBELN)),
Sum(VBAP.NETWR)
From VBAP
Inner Join VBAK on (VBAP.MANDT = VBAK.MANDT and VBAP.VBELN = VBAK.VBELN)
Inner Join (Select * From OpenQuery
(WMAN,
'Select KNVV.KUNNR as ''kunnr'', KNVV.KDGRP as ''kdgrp'' From KNVV'
)
) knvv On (VBAK.KUNNR = knvv.kunnr)
Inner Join (Select * From OpenQuery
(WMAN,
'Select T921.VBELN as ''vbeln'', T921.POSNR as ''posnr'' From T921'
)
) t921 On (Right(VBAP.VBELN,6) = Right(t921.vbeln,6) and VBAP.POSNR = t921.posnr)
Inner Join T151T on (knvv.kdgrp = T151T.KDGRP)
Where VBAK.AUART In ('TA') and VBAK.ERDAT Between @sMyStart and @sMyFinish and T151T.KDGRP Not In ('99')
Group By T151T.KTEXT, VBAK.ERDAT
Order By T151T.KTEXT, VBAK.ERDAT