Crystal reports Crystal报告和存储过程

Crystal reports Crystal报告和存储过程,crystal-reports,Crystal Reports,我是Crystal Reports的新手,还在学习,所以我想知道我应该怎么做。我有以下存储过程: 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 DATALENGT

我是Crystal Reports的新手,还在学习,所以我想知道我应该怎么做。我有以下存储过程:

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
创建过程GetSurveyAnswerDetail
(@Question VARCHAR(255)=NULL,@AllowReportFlag CHAR(1)=NULL)
作为
不计较
声明@rc INT
设置@rc=1
如果(@Question为NULL或DATALENGTH(@Question)=0
或@AllowReportFlag为NULL或DATALENGTH(@AllowReportFlag)=0
RAISERROR('GetSurveyAnswerDetail缺少参数',16,1)
其他的
开始
声明@AllowReport VARCHAR(100)
如果(@AllowReportFlag='N')
设置@AllowReport='AllowReport='Y'和'
其他的
设置为@AllowReport=''
声明@SQLStatement VARCHAR(5000)
SET@SQLStatement='从tblSurveyAnswer中选择COUNT('+@Question+'),其中'+@AllowReport+@Question+'!=''按“++@Question++”分组按“++@Question++”DESC”排序
EXEC(@SQLStatement)
如果@错误0
RAISERROR('GetSurveyAnswerDetail失败。问题可能不存在',16,1)
其他的
设置@rc=0
结束
返回@rc
去

这将返回一个数字列表。我想做的是从Crystal Reports中的这些数字创建一个饼图。我知道您可以从存储过程设置数据源,但当我这样做时,没有字段可以选择。我可能用了错误的方法,所以如果您有任何意见,我将不胜感激。

Michael,请尝试让您的存储过程返回一个表。我猜您没有看到任何字段,因为您没有返回任何字段。将回油管改为

SELECT @rc AS Result

这将在报告中以字段的形式显示结果。我不确定您是否可以在一个循环中单独运行该过程来制作饼图。您可能需要从一个存储过程中返回所需的所有数据

必须有一个
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”。

嗨,dotjoe,我对问题进行了一些编辑,以使问题更清楚。谢谢。+1他确实执行了动态sql…但这仍然只是一个数字。确切地说,是dotjoe。制作一个迭代值列表并一次性提供整个数据集的版本应该很简单。