如何在Crystal Reports中指定SQL表类型输入参数?

时间:2010-09-27 19:23:39

标签: sql-server-2008 crystal-reports parameters crystal-reports-xi

我需要将一个键值列表传递给SQL-Server中的存储过程,然后该存储过程将返回Crystal Report所需的值。

不是发送逗号分隔列表然后解析它,而是建议我使用表类型。所以,我已经将表类型定义为简单的整数:

CREATE TYPE [dbo].[SiteIdentifiers] AS TABLE 
(
    [SiteId]     BigInt, 
    PRIMARY KEY ([SiteId])
)

但是,现在我需要修改我的Crystal Report以将其作为输入参数。 (存储过程以...开头

CREATE  PROCEDURE [dbo].[sp_SiteReport]
    @SiteIds    [dbo].[SiteIdentifiers] ReadOnly
AS

报告主要使用ColdFusion或C#.net调用,因此我认为在向表类型添加ID时不会出现问题。但我不知道如何在Crystal中定义该参数。 “创建新参数”向导中的“类型”列表非常缺乏。

3 个答案:

答案 0 :(得分:1)

我认为你没有正确地使用Crystal中的Parameter概念。据我所知,它最适合用于手动输入数据(并且您尝试传递多维数组,而不是最好地使用它)。我建议:

  1. 你的第一个想法是以逗号分隔的字符串在表格中加入。
    或者
  2. 将过程的输出保存到SQL-Server中的临时表并导入它。

答案 1 :(得分:0)

通常,通过将报告指向过程来创建运行过程的Crystal报表 - 在报表中自动生成过程的所有必需参数。如果您在Crystal Reports设计器中完成此操作而没有生成表输入参数的报告,那么我认为您不能这样做。

作为使用逗号分隔列表的另一种选择,您是否考虑过:

  • 创建一个表来保存会话ID和输入值,
  • 在运行报告之前使用会话ID和所需的输入值填充表格,
  • 将会话ID作为参数传递给报告
  • 将会话ID从报告传递给过程作为参数
  • 编写过程以根据会话ID从新表中选择输入值,并在运行报告后删除会话ID的条目?

答案 2 :(得分:0)

据我所知,这是不可能的。 Crystal不会从其他应用程序(如SQL Server)中获取无法识别的数据类型。