0

我需要将键值列表传递给SQL-Server中的存储过程,然后该存储过程返回Crystal报表所需的值。如何在Crystal Reports中指定SQL表类型输入参数?

而不是发送一个逗号分隔列表,然后解析它,有人建议我使用表类型。所以,我定义为只是使整数该表类型:

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

不过,现在我需要修改我的水晶报表,以采取作为输入参数。 (存储过程与...开始

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

该报告将主要使用ColdFusion或者C#.net调用,所以我不认为会出现在ID加入到表型的问题。但我不知道如何在Crystal中定义该参数,创建新参数向导中的类型列表很少。

回答

0

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

1

我不认为你在Crystal中正确使用Parameter概念。知识,它最适合用于手动输入数据(并且您试图通过多维数组,而不是最佳使用它)。我推荐:

  1. 您的第一个想法是以逗号分隔的字符串形式填充表格。
  2. 将您的过程的输出保存到SQL-Server中的临时表中并导入它。
+0

如果存储过程需要参数,是不是Crystal需要指定它们呢?这并不是说我不会最终使用逗号分隔的字符串,但更多的是关于不正确使用参数的初始问题。如果我要使用Crystal,并且存储过程需要参数,那么似乎是参数的要点。 – thursdaysgeek 2010-09-27 20:52:25

+0

啊,没有意识到存储过程需要的参数(尽管你明确地这么说)。在这种情况下,参数是否完全需要由Crystal生成?如果你先运行proc,用一个存储在sql-server上的查询来提供它,然后运行Crystal? – PowerUser 2010-09-27 21:04:56

0

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

的另一个替代用逗号分隔的列表,你有没有考虑:

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