1

多くのドロップダウンパラメータを含むレポート(sprocに入れられる)で、SSRSで奇妙なエラーが発生します。

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'

私はここで何が起こっているのか迷っています-何が意味するのか@name = value

オンラインで検索したところ、ストアドプロシージャを変更する必要があると誰かが言っていましたか?

これが私のストアドプロシージャの上半分がどのように見えるかです:

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'''

そして後でストアドプロシージャで。文字列を分割するには、次のような処理を行います。

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, '','

ここに画像の説明を入力してください

4

1 に答える 1

2

ストアドプロシージャを呼び出すときは、パラメータを位置(お勧めできません)または名前(より良いアプローチの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

表示されるエラーメッセージから、SSRSは2番目のアプローチを使用しており、ストアドプロシージャに提供されている3番目のパラメーターに問題が発生していると思われます。

エラーの正確な説明を提供することは困難です(ストアドプロシージャが役立つ可能性があります)。知識に基づいた推測では、パラメータの提供方法がAccount IDs, Client IDs and Supplier IDs完全に正しくありません。具体的には、コンマで区切られた複数の識別子を指定していることが問題である可能性があると思います。

単一のアカウントID、クライアントID、およびサプライヤーIDを渡して、引き続きエラーが発生するかどうかを確認してください。また、ストアドプロシージャを調べて(または、それを作成したDBA \ Developerに相談して)、ストアドプロシージャの使用目的を確認しようとします。

于 2013-01-29T01:53:42.967 に答える