Unfortunately, even after writing code to get around parameter sniffing this still is not working. Here's the stored proc. Any help would be much appreciated.
------------------------------------------------------
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
ALTER PROCEDURE [dbo].[sp_CPM_Data_Change_Report_NEW] @CurrentDay AS smalldatetime, @WhatDay AS smalldatetime
AS
SELECT
[AS OF DATE] =
CASE
WHEN CONVERT(Varchar(10), ISNULL(CURR.[As Of Date], '9999-12-31'), 101) = '12/31/9999' THEN ''
ELSE
CONVERT(Varchar(10), ISNULL(CURR.[As Of Date], '9999-12-31'), 101)
END,
[PREV DATE] =
CASE
WHEN CONVERT(Varchar(10), ISNULL(PREV.[As Of Date], '9999-12-31'), 101) = '12/31/9999' THEN ''
ELSE
CONVERT(Varchar(10), ISNULL(PREV.[As Of Date], '9999-12-31'), 101)
END,
ISNULL(ISNULL(CURR.ANALYST, PREV.ANALYST), 'NOT FOUND') AS ANALYST,
ISNULL(CURR.[CONCENTRATION_RISK_NAME], PREV.[CONCENTRATION_RISK_NAME]) AS [CONCENTRATION_RISK_NAME],
ISNULL(CURR.[C/A NUMBER], PREV.[C/A NUMBER]) AS [C/A NUMBER],
ISNULL(CURR.[Description], PREV.[Description]) AS [Description],
ISNULL(CURR.[Facility Type], CURR.[Facility Type]) AS [Facility Type],
ISNULL(CURR.[CUSTOMER NAME], PREV.[CUSTOMER NAME]) AS [CUSTOMER NAME],
ISNULL(CURR.[BUSINESS LINE], PREV.[BUSINESS LINE]) AS [BUSINESS LINE],
ISNULL(CURR.[Service Section Number], PREV.[Service Section Number]) AS [SERVICE SECTION NUMBER],
ISNULL(CURR.[CURRENCY CODE], PREV.[CURRENCY CODE]) AS [CURRENCY CODE],
CAST(ROUND(ISNULL(CURR.[AUTHORIZED],0),0) AS MONEY) AS [GROSS AUTHORIZED CURRENT CAD],
CAST(ROUND(ISNULL(PREV.[AUTHORIZED],0),0) AS MONEY) AS [GROSS AUTHORIZED PRIOR CAD],
CAST(ROUND(ISNULL(CURR.[AUTHORIZED],0),0)-ROUND(ISNULL(PREV.[AUTHORIZED],0),0) AS MONEY) AS [GROSS CHANGE IN AUTHORIZED CAD],
CAST(ROUND(ISNULL(CURR.[NET AUTHORIZED],ISNULL(CURR.[AUTHORIZED],0)),0) AS MONEY) AS [NET AUTHORIZED CURRENT CAD],
CAST(ROUND(ISNULL(PREV.[NET AUTHORIZED],ISNULL(PREV.[AUTHORIZED],0)),0) AS MONEY) AS [NET AUTHORIZED PRIOR CAD],
CAST(ROUND(ISNULL(CURR.[NET AUTHORIZED],ISNULL(CURR.[AUTHORIZED],0)),0)-ROUND(ISNULL(PREV.[NET AUTHORIZED],ISNULL(PREV.[AUTHORIZED],0)),0) AS MONEY) AS [CHANGE IN NET AUTHORIZED CAD],
CAST(ROUND(ISNULL(CURR.[USED],0),0) AS MONEY) AS [USED CURRENT CAD],
CAST(ROUND(ISNULL(PREV.[USED],0),0) AS MONEY) AS [USED PRIOR CAD],
CAST(ROUND(ISNULL(CURR.[USED],0),0)-ROUND(ISNULL(PREV.[USED],0),0) AS MONEY) AS [CHANGE IN USED CAD],
CAST(ISNULL(CURR.[FRR], 0) AS INT) AS [FRR],
CAST(ISNULL(PREV.[FRR], 0) AS INT) AS [FRR PRIOR],
ROUND(ISNULL(CURR.[FRR],0),0)-ROUND(ISNULL(PREV.[FRR],0),0) AS [CHANGE IN FRR],
ISNULL(CURR.[OBLIGOR RISK RATING], 0) AS [OBLIGOR RISK RATING],
ISNULL(PREV.[OBLIGOR RISK RATING], 0) AS [OBLIGOR RISK RATING PRIOR],
ROUND(ISNULL(CURR.[OBLIGOR RISK RATING],0),0)-ROUND(ISNULL(PREV.[OBLIGOR RISK RATING],0),0) AS [CHANGE IN OBLIGOR RISK RATING],
CONVERT(Varchar(10), ISNULL(CURR.[MATURITY], '1900-01-01 00:00:00.000'), 101) AS [MATURITY],
CONVERT(Varchar(10), ISNULL(PREV.[MATURITY], '1900-01-01 00:00:00.000'), 101) AS [MATURITY PRIOR],
CASE WHEN CURR.[MATURITY] = '1900-01-01' OR CURR.[MATURITY] IS NULL
OR PREV.[MATURITY] = '1900-01-01' OR PREV.[MATURITY] IS NULL THEN 0
ELSE DATEDIFF (DAY , PREV.[MATURITY] , CURR.[MATURITY]) END AS [MATURITY CHANGE IN DAYS]
FROM
(SELECT A.[As Of Date],
ISNULL(B.[ConcentrationRiskName], A.[customer name]) CONCENTRATION_RISK_NAME,
A.[C/A NUMBER],
A.[Description],
A.[Facility Type],
A.[CUSTOMER NUMBER],
A.[CUSTOMER NAME],
A.[Service Section Number],
A.[BUSINESS LINE],
A.[CAPITAL REGION],
M.ANALYST,
A.[CURRENCY CODE],
A.AUTHORIZED /(SELECT MAX([EXCHANGE RATE]) FROM tbl_FacilitiesExtract_Hist
WHERE [As Of Date] = @CurrentDay
AND [CURRENCY CODE] = 'CAD') AS [AUTHORIZED],
net.NET_AUTH /(SELECT MAX([EXCHANGE RATE]) FROM tbl_FacilitiesExtract_Hist
WHERE [As Of Date] = @CurrentDay
AND [CURRENCY CODE] = 'CAD') AS [NET AUTHORIZED],
A.[TOTAL USED] /(SELECT MAX([EXCHANGE RATE]) FROM tbl_FacilitiesExtract_Hist
WHERE [As Of Date] = @CurrentDay
AND [CURRENCY CODE] = 'CAD') AS [USED],
ISNULL(A.[Expiry Date], '1900-01-01') AS [MATURITY],
A.[Facility Risk Rating] AS [FRR],
A.[OBLIGOR RISK RATING]
FROM
(SELECT *
FROM tbl_FacilitiesExtract_Hist
WHERE [As Of Date] = @CurrentDay) A
inner join tbl_companies_hist C
on a.[customer number] = c.cnum and a.archive_date = c.archive_date
LEFT JOIN tbl_dssData_HIST B
ON A.[c/a number] = B.[c/a number] AND A.[as of date] = B.[as of date]
left join usa_sic_to_analyst_map m
on c.SICC = M.SIC_USA_CD
left join
(
select f1.archive_date, f1.[c/a number], f1.[customer name], f1.authorized,
sum(f2.authorized) auth_hedged,
f1.authorized + sum(f2.authorized) net_auth
from (select archive_date, [c/a number], [customer name], authorized from
tbl_facilitiesextract_HIST where [as of date] = @CurrentDay) f1 inner join
(select distinct d.archive_date, d.optex_or_alice Trade_ID, d.[reference id] [Underlying_Facility_ID]
from derivatives d,
tbl_facilitiesextract_hist f
where d.[reference id] = f.[c/a number]
and d.archive_date = f.archive_date
and f.[as of date] = @CurrentDay
and [reference id] is not null) map1
on f1.[c/a number] = map1.Underlying_Facility_ID and f1.archive_date = map1.archive_date
inner join
(select archive_date, [c/a number], [customer name], authorized from tbl_facilitiesextract_HIST where [as of date] = @CurrentDay) f2
on f2.[c/a number] = map1.Trade_Id and f2.archive_date = map1.archive_date
group by F1.ARCHIVE_DATE, f1.[c/a number], f1.[customer name], f1.authorized) net
on A.[c/a number] = net.[c/a number] and A.archive_date = net.archive_date
WHERE A.[As Of Date] = @CurrentDay
AND A.[C/A NUMBER] NOT LIKE '%I1'
AND A.AUTHORIZED >=0) CURR
FULL OUTER JOIN
(SELECT A.[As Of Date],
ISNULL(B.[ConcentrationRiskName], A.[customer name]) CONCENTRATION_RISK_NAME,
A.[C/A NUMBER],
A.[Description],
A.[Facility Type],
A.[CUSTOMER NUMBER],
A.[CUSTOMER NAME],
A.[Service Section Number],
A.[BUSINESS LINE],
A.[CAPITAL REGION],
M.ANALYST,
A.[CURRENCY CODE],
A.AUTHORIZED/(SELECT MAX([EXCHANGE RATE]) FROM tbl_FacilitiesExtract_Hist
WHERE [As Of Date] = @WhatDay
AND [CURRENCY CODE] = 'CAD') AS [AUTHORIZED],
net.NET_AUTH /(SELECT MAX([EXCHANGE RATE]) FROM tbl_FacilitiesExtract_Hist
WHERE [As Of Date] = @WhatDay
AND [CURRENCY CODE] = 'CAD') AS [NET AUTHORIZED],
A.[TOTAL USED] /(SELECT MAX([EXCHANGE RATE]) FROM tbl_FacilitiesExtract_Hist
WHERE [As Of Date] = @WhatDay
AND [CURRENCY CODE] = 'CAD') AS [USED],
ISNULL(A.[Expiry Date], '1900-01-01') AS [MATURITY],
A.[Facility Risk Rating] AS [FRR],
A.[OBLIGOR RISK RATING]
FROM
(SELECT *
FROM tbl_FacilitiesExtract_Hist
WHERE [As Of Date] = @WhatDay ) A
inner join tbl_companies_hist C
on a.[customer number] = c.cnum and a.archive_date = c.archive_date
LEFT JOIN tbl_dssData_HIST B
ON A.[c/a number] = B.[c/a number] AND A.[as of date] = B.[as of date]
left join usa_sic_to_analyst_map m
on c.SICC = M.SIC_USA_CD
left join
(
select f1.archive_date, f1.[c/a number], f1.[customer name], f1.authorized,
sum(f2.authorized) auth_hedged,
f1.authorized + sum(f2.authorized) net_auth
from (select archive_date, [c/a number], [customer name], authorized from tbl_facilitiesextract_HIST where [as of date] = @whatday) f1 inner join
(select distinct d.archive_date, d.optex_or_alice Trade_ID, d.[reference id] [Underlying_Facility_ID] from derivatives d,
tbl_facilitiesextract_hist f
where d.[reference id] = f.[c/a number]
and d.archive_date = f.archive_date
and f.[as of date] = @whatday
and [reference id] is not null) map1
on f1.[c/a number] = map1.Underlying_Facility_ID and f1.archive_date = map1.archive_date
inner join
(select archive_date, [c/a number], [customer name], authorized from tbl_facilitiesextract_HIST where [as of date] = @whatday) f2
on f2.[c/a number] = map1.Trade_Id and f2.archive_date = map1.archive_date
group by F1.ARCHIVE_DATE, f1.[c/a number], f1.[customer name], f1.authorized) net
on A.[c/a number] = net.[c/a number] and A.archive_date = net.archive_date
WHERE A.[As Of Date] = @WhatDay
AND A.[C/A NUMBER] NOT LIKE '%I1'
AND A.AUTHORIZED >=0) PREV
ON CURR.[c/a number] = PREV.[c/a number]
ORDER BY
ROUND(ISNULL(CURR.[AUTHORIZED],0),0)-ROUND(ISNULL(PREV.[AUTHORIZED],0),0) DESC,
ROUND(ISNULL(CURR.[USED],0),0)-ROUND(ISNULL(PREV.[USED],0),0) DESC,
ROUND(ISNULL(CURR.[OBLIGOR RISK RATING],0),0)-ROUND(ISNULL(PREV.[OBLIGOR RISK RATING],0),0) DESC,
ROUND(ISNULL(CURR.[FRR],0),0)-ROUND(ISNULL(PREV.[FRR],0),0)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO