0

我需要将键值列表传递给 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 中定义该参数。创建新参数向导中的类型列表很少。

4

3 回答 3

1

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

  1. 您将表格作为逗号分隔的字符串输入的第一个想法。
    或者
  2. 将过程的输出保存到 SQL-Server 中的临时表并导入。
于 2010-09-27T19:59:29.990 回答
1

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

于 2010-10-20T23:47:54.667 回答
0

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

作为使用逗号分隔列表的另一种替代方法,您是否考虑过:

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