【问题标题】:How to specify a SQL table type input parameter in Crystal Reports?Crystal Reports中如何指定SQL表类型输入参数?
【发布时间】:2010-09-27 19:23:38
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 如果存储过程需要参数,Crystal不需要指定吗?这并不是说我最终不会使用逗号分隔的字符串,而是说你没有正确使用参数的初始点。如果我要使用Crystal,而存储过程需要参数,看来是参数的重点。
    • 啊,没有意识到存储过程需要参数(即使你明确说过)。那么,参数是否绝对需要由Crystal生成?如果您先运行 proc,向它提供存储在 sql-server 上的查询,然后运行 ​​Crystal 会怎样?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多