2009-11-10 84 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'。