2013-03-05 22 views
3

我一直在工作SSRS報告,以及對我的一個存儲過程,它使用動態SQL suchthat我得到這個錯誤:如何將使用動態SQL的存儲過程轉換爲非動態SQL(SSRS)?

An item with the same key has already been added. 

所以我GOOGLE了這個錯誤了一點,但它的仍然朦朧到我..

我的存儲過程發生在那些肘杆式幾個參數,如跟隨着:

@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 

在這兩個代碼塊在這裏發生的問題(他們不是連續):

-- 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.FEDSurveyNamecs.FEDSurveyName,與同爲SupplierSurveyName。我感謝任何提示!謝謝

+1

正如有人誰在一頂帽子的下降downvotes,我不明白爲什麼這個問題正在downvoted。 – 2013-03-05 02:12:56

+1

到目前爲止,您向我們展示的內容中沒有任何內容會導致該錯誤。在執行它們之前打印出你的'@ SQL'變量,然後在這裏發佈失敗的變量。 – RBarryYoung 2013-03-05 02:19:43

+1

這是因爲在代碼中命名輸出的方式相同,即使在不同的分支中也是如此。看到答案,應該只在設置字段名稱時工作。 – revoua 2013-03-05 02:31:47

回答

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

+0

非常感謝,這工作! – Coffee 2013-03-05 16:20:27

1

我認爲這些代碼段用於生成您的選擇列表。要將其轉換爲非動態SQL:

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

當然「等」只是表示您繼續使用其他列,您可以爲顯示的其他條件列創建另一個案例語句。

+0

非常感謝,非常感謝! – Coffee 2013-03-05 16:20:44