繁体   English   中英

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

[英]How to specify a SQL table type input parameter in Crystal Reports?

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

建议不要使用逗号分隔的列表然后进行解析,而建议使用表类型。 因此,我将表类型定义为简单地由整数组成:

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中定义该参数。 “创建新参数”向导中的“类型”列表不多。

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

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

通常,通过将报表指向该过程来创建运行该过程的Crystal报表-该过程所需的任何参数都会在报表中自动生成。 如果您是在Crystal Reports设计器中完成此操作的,而报表未生成表输入参数,那么我认为您不能以这种方式进行。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM