Search code examples
sqlreporting-servicesssrs-2008

"Subsequent parameters" error in SSRS?


I'm getting a strange error in SSRS, in a report (which gets put into a sproc) with many drop-down parameters:

Query execution failed for dataset 'DataSet1'.

Must pass parameter number 3 and subsequent parameters as '@name = value'. After the form '@name = value' has been used, all subsequent parameters must be passed in the form '@name = value'

I'm lost on what's going on here - what is meant by @name = value .

I searched online, someone mentioned that you should alter the stored-procedure?

Here is how the top half of my stored-proc looks:

USE [FederatedSample]
GO


SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



ALTER PROCEDURE [dbo].[prc_RPT_Select_BI_Completes_Data_View_2]


    @FromDate DATETIME,
    @ToDate DATETIME,

    @AccountIDs VARCHAR(max) = null,
    @ClientIDs VARCHAR(max) = null,
    @SupplierIDs VARCHAR(max) = null,

    @CompleteType INT = NULL,
    /*
     * 0 - Routed
     * 1 - Targeted
     * 2 - Offerwall
     */

    @SourceType BIT = NULL,
    /*
     * Works if @AccountID is not null
     * (should only be used if @AccountID has a single value)
     *
     * 0 - Owned by @AccountID
     * 1 - External (not owned by @AccountID)
     */

    @SurveyStatus INT = NULL,
    /*
     * NULL - All Surveys
     * 0 - Completes Approved Surveys
     * 1 - Invoiced Surveys
     */

    @IsSupplierUser BIT = 0
    /*
     * used to decide whether to display FEDSurveyName or SupplierSurveyName
     */
AS
BEGIN
    SET NOCOUNT ON

    DECLARE @SQL NVARCHAR(MAX) = N'',
            @Params NVARCHAR(MAX)

    IF @AccountIDs is not null
    BEGIN
        SET @SQL += N'DECLARE @AccountIDs VARCHAR(MAX) = @pAccountIDs; '
    END

    IF @ClientIDs is not null
    BEGIN
        SET @SQL += N'DECLARE @ClientIDs VARCHAR(MAX) = @pClientIDs; '
    END

    IF @SupplierIDs is not null
    BEGIN
        SET @SQL += N'DECLARE @SupplierIDs VARCHAR(MAX) = @pSupplierIDs; '
    END

    SET @SQL +=  N'
        SELECT   bi.SupplierID as ''Supplier ID''
                ,bi.SupplierName as ''Supplier Name''

                ,bi.PID as ''PID''
                ,bi.RespondentID as ''Respondent ID''

                ,lk_slt.Name as ''Entry Link Type''

                ,ts.SurveyNumber as ''Initial Survey ID'''

And later in the stored proc. it does stuff like this to split strings:

IF @AccountIDs is not null 
BEGIN
    SET @SQL += CHAR(13) + CHAR(9)
    SET @SQL += N' and bi.AccountID in (SELECT CAST(val as INT) FROM dbo.Split(@AccountIDs, '','

enter image description here


Solution

  • When invoking a stored procedure, you either can pass the parameters by position (not a good idea) or by Name (a better approach IMHO).

    EXEC dbo.MyStoredProcedure '12/31/2012', 1;  -- Not a great way to pass parameters 
    
    EXEC dbo.MyStoredProcedure @AsOfDate = '12/31/2012', @AccountID = 1; -- A better way
    

    From the error message you are receiving, I suspect that SSRS is using the second approach and is running into an issue with the third parameter being provided to the stored procedure.

    Without more information to go off of it is difficult to provide you with an exact explanation for the error (the stored procedure would perhaps help), an educated guess is that the way the parameters are being provided for Account IDs, Client IDs and Supplier IDs isn't quite correct. Specifically, I think the problem might be that you are providing multiple identifiers delimited by a comma.

    You might try passing a single Account ID, Client ID and Supplier ID to see if you still receive the error. I would also try to look at the stored procedure (or talk to the DBA \ Developer who wrote it) to ascertain the intended usage of the stored procedure.