I have a parameterized SSRS report executing a parameterized query. In Visual Studio/BIDS, once the parameters are entered on the Preview tab, and [View Report] is clicked, the spinning "Loading..." warning appears... and stays. If
I open up the query for the underlying dataset in BIDS, and execute it from the Query Designer, it runs for about 5 to 10 seconds, then returns an SQL Execution window saying "Timeout expired". If I remove one particular condition from the
WHERE clause, then re-execute in Query Designer, it returns rows in a flash.
Okay, so it's something to do with that particular selection condition? But, if I copy the parameterized query to a Query window in SSMS, and add DECLARE statements for the parameters (with appropriate value assignments), the query also returns results
in seconds. So, my problem (I think) is, why won't it run in BIDS when that particular condition is present?
The particular condition whose removal allows the query to execute in Report Designer (BIDS) is
AND (SSI_REP_PRODUCT_DETAIL.CONTROLLER BETWEEN COALESCE (CAST(@CONTROLLER AS VARCHAR(3)), ' ') AND COALESCE (CAST(@CONTROLLER AS VARCHAR(3)), '999'))
The coding is done that way because in the available values dropdown (another dataset) for the parameter @CONTROLLER, there is one labeled "ALL" that equates to a NULL value. So, if NULL is the value, then all rows having CONTROLLERs
between ' ' and '999' are returned (i.e. ALL CONTROLLERS).
The full query for the report populating dataset is:
SELECT SSI_REP_PURCHASE_DETAIL.ACCOUNT15, SSI_REP_PURCHASE_DETAIL.ORDER_NUMBER, SSI_REP_PURCHASE_DETAIL.ORDER_LINE,
SSI_REP_PURCHASE_DETAIL.DUE_DATE, SSI_REP_PURCHASE_DETAIL.ORDER_UOM, SSI_REP_PURCHASE_DETAIL.BUYER_NAME,
SSI_REP_PURCHASE_DETAIL.ORDER_PRICE_BASE, SSI_REP_PURCHASE_DETAIL.STD_COST, SSI_REP_PURCHASE_DETAIL.PRICE_VARIANCE,
SSI_REP_PRODUCT_DETAIL.PRODUCT_CODE, SSI_REP_PRODUCT_DETAIL.PRODUCT_DESCRIPTION, SSI_REP_PURCHASE_DETAIL.ORDER_QUANTITY
FROM SSI_REP_PURCHASE_DETAIL
LEFT OUTER JOIN SSI_REP_PRODUCT_DETAIL
ON SSI_REP_PURCHASE_DETAIL.ACCOUNT15 = SSI_REP_PRODUCT_DETAIL.ACCOUNT15 AND
SSI_REP_PURCHASE_DETAIL.PRODUCT_CODE = SSI_REP_PRODUCT_DETAIL.PRODUCT_CODE
WHERE (SSI_REP_PURCHASE_DETAIL.ACCOUNT15 = @ACCOUNT15) AND (SSI_REP_PURCHASE_DETAIL.DUEDATE_YEAR = @DUEDATE_YEAR) AND
(SSI_REP_PRODUCT_DETAIL.CONTROLLER BETWEEN COALESCE (CAST(@CONTROLLER AS VARCHAR(3)), ' ') AND
COALESCE (CAST(@CONTROLLER AS VARCHAR(3)), '999'))
Again, if I copy the above into a Query window in SSMS and add DECLARE statements for the parameters, it runs just fine, as below:
DECLARE @CONTROLLER AS NVARCHAR(5) = '108'
DECLARE @ACCOUNT15 AS VARCHAR(15) = '000010000100001'
DECLARE @DUEDATE_YEAR AS NUMERIC(19,0) = 2017
SELECT COALESCE (@CONTROLLER, ' ') , COALESCE (@CONTROLLER, '999'), SSI_REP_PURCHASE_DETAIL.ACCOUNT15, SSI_REP_PURCHASE_DETAIL.ORDER_NUMBER, SSI_REP_PURCHASE_DETAIL.ORDER_LINE,
SSI_REP_PURCHASE_DETAIL.DUE_DATE, SSI_REP_PURCHASE_DETAIL.ORDER_UOM, SSI_REP_PURCHASE_DETAIL.BUYER_NAME,
SSI_REP_PURCHASE_DETAIL.ORDER_PRICE_BASE, SSI_REP_PURCHASE_DETAIL.STD_COST, SSI_REP_PURCHASE_DETAIL.PRICE_VARIANCE,
SSI_REP_PRODUCT_DETAIL.PRODUCT_CODE, SSI_REP_PRODUCT_DETAIL.PRODUCT_DESCRIPTION, SSI_REP_PURCHASE_DETAIL.ORDER_QUANTITY
FROM SSI_REP_PURCHASE_DETAIL LEFT OUTER JOIN
SSI_REP_PRODUCT_DETAIL ON SSI_REP_PURCHASE_DETAIL.ACCOUNT15 = SSI_REP_PRODUCT_DETAIL.ACCOUNT15 AND
SSI_REP_PURCHASE_DETAIL.PRODUCT_CODE = SSI_REP_PRODUCT_DETAIL.PRODUCT_CODE
WHERE (SSI_REP_PURCHASE_DETAIL.ACCOUNT15 = @ACCOUNT15) AND (SSI_REP_PURCHASE_DETAIL.DUEDATE_YEAR = @DUEDATE_YEAR) AND
(SSI_REP_PRODUCT_DETAIL.CONTROLLER BETWEEN COALESCE (@CONTROLLER, ' ') AND COALESCE (@CONTROLLER, '999'))
So, please help me figure out why that WHERE condition is causing me fits. Thanks, mightily.