Crystal reports Crystal报告和存储过程
我是Crystal Reports的新手,还在学习,所以我想知道我应该怎么做。我有以下存储过程: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
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。制作一个迭代值列表并一次性提供整个数据集的版本应该很简单。