2009-11-10 71 views
0

我是Crystal Reports的新手,仍然在學習,所以我想知道我應該怎麼做。我有以下存儲過程:Crystal報告和存儲過程

CREATE PROCEDURE GetSurveyAnswerDetail 
(@Question VARCHAR(255) = NULL, @AllowReportFlag CHAR(1) = NULL) 
AS 
    SET NOCOUNT ON 
    DECLARE @rc INT 
    SET @rc = 1 

    IF (@Question IS NULL OR DATALENGTH(@Question) = 0 
     OR @AllowReportFlag IS NULL OR DATALENGTH(@AllowReportFlag) = 0) 
     RAISERROR('GetSurveyAnswerDetail is missing parameters.', 16, 1) 
    ELSE 
     BEGIN 
      DECLARE @AllowReport VARCHAR(100) 
      IF (@AllowReportFlag = 'N') 
       SET @AllowReport = ' AllowReport = ''Y'' AND ' 
      ELSE 
       SET @AllowReport = '' 

      DECLARE @SQLStatement VARCHAR(5000) 
      SET @SQLStatement = 'SELECT COUNT(' + @Question + ') FROM tblSurveyAnswer WHERE ' + @AllowReport + @Question + ' != '''' GROUP BY ' + @Question + ' ORDER BY ' + @Question + ' DESC' 
      EXEC (@SQLStatement) 

      IF @@ERROR <> 0 
       RAISERROR('GetSurveyAnswerDetail has failed. Question may not exist.', 16, 1) 
      ELSE 
       SET @rc = 0 
     END 
RETURN @rc 
GO 

這將返回號碼列表。我想要做的是在Crystal Reports中根據這些數字創建餅圖。我知道你可以從存儲過程設置你的數據源,但是當我這樣做時,沒有我可以選擇的字段。我可能會以這種錯誤的方式進行討論,所以我會很感激任何評論。

+0

你的問題是什麼? – dotjoe 2009-11-10 21:17:41

+0

你好dotjoe,我已經編輯了一些問題,使其更清楚我的問題是什麼。謝謝。 – Michael 2009-11-12 21:16:23

回答

2

邁克爾,請嘗試使您的存儲過程返回一個表。我的猜測是,你沒有看到任何領域,因爲你沒有返回任何。將回報行更改爲

SELECT @rc AS Result 

這應該會顯示結果作爲報表中的字段。我不確定你可以單獨運行proc來製作餅圖。您可能需要從一個存儲過程中返回所需的所有數據。

+0

+1他執行exec動態sql ...但仍然只有1個數字。 – dotjoe 2009-11-12 21:45:04

+0

精確dotjoe。編寫一個迭代通過值列表並一次提供整個數據集的版本應該是微不足道的。 – theo 2009-11-12 22:22:33

0

必須select查詢是背後隱藏的if聲明。 如果存儲過程是:

If @question = 'Y' 
    begin 
    SET @SQLStatement = 'select field from table where condition='OK' 
    EXEC (@SQLStatement) 
end 

在這個例子中沒有字段將被顯示。將其更改爲:

If @question = 'Y' 
    begin 
    SET @SQLStatement = 'select field from table where condition='OK' 
end 
else 
    Begin 
    select field from table where condition='impossiblecondition' 
end 

在這個例子中工作和領域將被顯示。

我創建了一個虛擬參數,如@question並傳遞'Y'。