Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 SQL Server 2000 Forums
 SQL Server Development (2000)
 SP Tuning-Help

Author  Topic 

getsrikar
Starting Member

2 Posts

Posted - 2008-04-04 : 14:26:02
Hi All,

I spent considerabale amount of time on tuning the following query.I tried to remove temp table with derived table,but while executing, i was getting errors.

I dont have any idea about tuning on Cursors in the below query.My major concerns are, how can i replace cursors and temp tables in the below query.

Any help from anyone will be greatly appriciated....

/* TOTAL TIME TAKEN FOR EXECUTION : 43 SECONDS */

declare @Month int
declare @IDate datetime
DECLARE @ptrval binary(16)
declare @length int
Declare @tempbody varchar(8000)
declare @cmd varchar(100)
declare @cmd1 varchar(100)
declare @recordcount int
Declare @FromEmail varchar(100)
Declare @ToEmail varchar(300)
Declare @DBName varchar(50)
Declare @Body varchar(100)
Declare @Subject varchar(100)
Declare @Subject1 varchar(100)
Declare @Count varchar(20)
Declare @OutStand varchar(20)
DECLARE @FDate datetime
DECLARE @TDate datetime
DECLARE @TodayDate datetime
Declare @RequestBy varchar(50)
Declare @QDate datetime
Declare @QDay varchar(10)

DECLARE @I int

SET @Month = 2
SET @IDate = Null

IF @IDate is Null
SET @IDate = getdate()

SET @TodayDate = @IDate
SET @QDate = @TodayDate

SET @QDAY = DATENAME(weekday, @QDATE)

SET @I = 1
WHILE (@I <= @Month)
BEGIN
SET @FDate = dbo.FirstDayOfTheMonth(dbo.FirstDayOfTheMonth(@QDate)-1)
SET @TDate = dbo.LastDayOfTheMonth(dbo.FirstDayOfTheMonth(@QDate)-1)
SET @I = @I + 1
SET @QDATE = @TDATE
END

SELECT DISTINCT Masters_Users.firstname+' '+Masters_Users.lastname as 'RequestedBy',
COUNT(NewCCaseNumber) as 'EUO Requested',
SUM(case when convert(varchar,CaseManager_EUO.ResponseDate,101) = '12/31/9999'
then 1
else 0 END) as 'EUO OutStand'
INTO ##tmpEUO
FROM CaseManager_EUO
INNER JOIN Masters_ClaimCases
ON CaseManager_EUO.ClaimCaseID = Masters_ClaimCases.ClaimCaseID
INNER JOIN Masters_Vendors
ON CaseManager_EUO.VendorID = Masters_Vendors.VendorID
INNER JOIN Masters_Organisation
ON Masters_Vendors.OrganisationID = Masters_Organisation.OrganisationID
INNER JOIN Masters_Users
ON CaseManager_EUO.CreatedBy = Masters_Users.UserID
WHERE (Convert(varchar, CaseManager_EUO.RequestedDate, 112) between Convert(varchar, @FDate, 112) and Convert(varchar, @TDate, 112))
group by Masters_Users.firstname+' '+Masters_Users.lastname with Rollup

DECLARE tmpcurEUORequest Cursor For
SELECT DISTINCT Masters_Users.firstname+' '+Masters_Users.lastname as 'RequestedBy',
COUNT(NewCCaseNumber) as 'EUO Requested',
SUM(case when convert(varchar,CaseManager_EUO.ResponseDate,101) = '12/31/9999'
then 1
else 0 END) as 'EUO Outstand'
FROM CaseManager_EUO
INNER JOIN Masters_ClaimCases
ON CaseManager_EUO.ClaimCaseID = Masters_ClaimCases.ClaimCaseID
INNER JOIN Masters_Vendors
ON CaseManager_EUO.VendorID = Masters_Vendors.VendorID
INNER JOIN Masters_Organisation
ON Masters_Vendors.OrganisationID = Masters_Organisation.OrganisationID
INNER JOIN Masters_Users
ON CaseManager_EUO.CreatedBy = Masters_Users.UserID
WHERE (CaseManager_EUO.RequestedDate between @FDate and @TDate)
group by Masters_Users.firstname+' '+Masters_Users.lastname with Rollup

SET @FromEMail = 'EUO-ToNF'
SET @ToEMail = 'mail1@gmail.com;mail2@gmail.com'
-- SET @ToEMail = 'mail1@gmail.com'
SET @Body = '<html><body>Please find attached -- EUO Request Monthly Report . <br><br><br>NF Administrator</body></html>'

select @DBName = db_name(dbid) from master..sysprocesses where spid=@@SPID
SET @cmd = 'bcp '+@DBName+'.dbo.emailbody out c:\EUOMonthlyReport.html -c'
SET @cmd1 = 'bcp ##tmpEUO out c:\EUOMonthlyReport.txt -c'
set @recordcount = 0

delete from emailbody
open tmpcurEUORequest
Fetch next from tmpcurEUORequest Into @RequestBy, @Count, @OutStand
insert into EmailBody (body) values ('<HTML><BODY><table width=100% border=0><tr><th align=center>American Transit Insurance Company</th></tr><tr><th align=center>No Fault - EUO Monthly Request</th></tr><tr><th align=center>Dates: '+DATENAME(weekday, @FDATE)+',  '+CONVERT(char(12),@FDATE,110)+'  to  '+DATENAME(weekday, @TDATE)+',  '+CONVERT(char(12),@TDATE,110)+'</th></tr><tr><td align=right>Today: '+DATENAME(weekday, getdate())+',  '+CONVERT(char(19),getdate())+'</td></tr></table><br>'+
'<table border=1 cellspacing=0 cellpadding=2 width=100% ><tr><th align=center>Request By</th><th align=center>EUO Requested</th><th align=center>O/S EUO</th></tr>')
While @@Fetch_Status = 0
Begin
SET @tempbody = '<tr><td><b>'+CAST(ISNULL(@RequestBy, 'ALL EXAMINERS') AS VARCHAR)+'</b></td><td align=right>'+CAST(@Count as varchar)+'</td><td align=right>'+CAST(@OutStand as varchar)+'</td></tr>'
SELECT @ptrval = TEXTPTR(body)
FROM emailbody
UPDATETEXT emailbody.body @ptrval NULL 0 @tempbody
Fetch next from tmpcurEUORequest Into @RequestBy, @Count, @OutStand
set @recordcount = @recordcount + 1
End
SET @tempbody = '</table></body></HTML>'
SELECT @ptrval = TEXTPTR(body)
FROM emailbody
UPDATETEXT emailbody.body @ptrval NULL 0 @tempbody

exec master..xp_cmdshell @cmd
exec master..xp_cmdshell @cmd1
-- DECLARE @SUBJECT VARCHAR(100)
SET @SUBJECT = 'We REQUESTED '+CAST(@RECORDCOUNT AS VARCHAR)+' EUO. (HTML) '
SET @SUBJECT1 = 'We REQUESTED '+CAST(@RECORDCOUNT AS VARCHAR)+' EUO. (TXT) '

EXEC sp_send_cdosysmail @FromEmail,@ToEmail, @SUBJECT, @Body, 'c:\EUOMonthlyReport.html'
EXEC sp_send_cdosysmail @FromEmail,@ToEmail, @SUBJECT1, @Body, 'c:\EUOMonthlyReport.txt'

deallocate tmpcurEUORequest
drop table ##tmpEUO


snSQL
Master Smack Fu Yak Hacker

1837 Posts

Posted - 2008-04-05 : 00:59:55
Dup post - http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=100334
Go to Top of Page
   

- Advertisement -