3

私はSSRSレポートに取り組んできましたが、ストアドプロシージャの1つでは、動的SQLを使用しているため、次のエラーが発生しています。

An item with the same key has already been added.

だから私はそのエラーを少しグーグルで調べましたが、それでも私にはぼんやりしています..

私のストアド プロシージャは、次のようなトグル型のいくつかのパラメーターを受け取ります。

@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

問題は、次の 2 つのコード ブロックで発生します (連続していません)。

-- Initial Survey Name
    IF @IsSupplierUser = 0
        SET @SQL += CHAR(13) + CHAR(9) + N' ,ts.FEDSurveyName as ''Initial Survey Name'''

    ELSE
        SET @SQL += CHAR(13) + CHAR(9) + N' ,ts.SupplierSurveyName as ''Initial Survey Name'''

次に、これ:

-- Complete Survey Name
IF @IsSupplierUser = 0
    SET @SQL += CHAR(13) + CHAR(9) + N' ,cs.FEDSurveyName as ''Complete Survey Name'''
ELSE
    SET @SQL += CHAR(13) + CHAR(9) + N' ,cs.SupplierSurveyName as ''Complete Survey Name'''

ts.FEDSurveyNameaと a の両方が あり、それぞれcs.FEDSurveyNameについても同じですSupplierSurveyName 。ヒントをいただければ幸いです。ありがとう

4

2 に答える 2

4
DECLARE
@IsSupplierUser BIT = 0,
@SQL NVARCHAR(MAX) ='init'
-- Initial Survey Name
SELECT @SQL += CASE @IsSupplierUser
    WHEN 0 THEN CHAR(13) + CHAR(9) + N' ,ts.FEDSurveyName'
    ELSE CHAR(13) + CHAR(9) + N' ,ts.SupplierSurveyName'
END + N' as ''Initial Survey Name'''
SELECT @SQL 

http://www.sqlfiddle.com/#!3/d41d8/10397

于 2013-03-05T02:25:57.800 に答える
1

これらのスニペットは、選択リストを生成するためのものだと思います。これを非動的 SQL に変換するには、次のようにします。

SELECT
  CASE 
    When @IsSupplierUser = 0 Then ts.FEDSurveyName 
    Else ts.SupplierSurveyName 
  END as 'Initial Survey Name',
  ts.SomeOtherColumn,
  etc.
  ...
FROM ...

もちろん「など」です。他の列を続行することを示しているだけで、表示した他の条件付き列に対して別の case ステートメントを使用できます。

于 2013-03-05T02:20:07.683 に答える