Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 如何在Crystal Reports中指定SQL表类型输入参数?_Sql Server 2008_Crystal Reports_Parameters_Crystal Reports Xi - Fatal编程技术网

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

Sql server 2008 如何在Crystal Reports中指定SQL表类型输入参数?,sql-server-2008,crystal-reports,parameters,crystal-reports-xi,Sql Server 2008,Crystal Reports,Parameters,Crystal Reports Xi,我需要将键值列表传递给SQLServer中的存储过程,然后该存储过程返回Crystal报表所需的值 有人建议我使用表类型,而不是发送逗号分隔的列表,然后对其进行解析。因此,我将该表类型定义为仅由整数组成: CREATE TYPE [dbo].[SiteIdentifiers] AS TABLE ( [SiteId] BigInt, PRIMARY KEY ([SiteId]) ) 但是,现在我需要修改我的Crystal报告,将其作为输入参数。存储过程以 CREATE

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

有人建议我使用表类型,而不是发送逗号分隔的列表,然后对其进行解析。因此,我将该表类型定义为仅由整数组成:

CREATE TYPE [dbo].[SiteIdentifiers] AS TABLE 
(
    [SiteId]     BigInt, 
    PRIMARY KEY ([SiteId])
)
但是,现在我需要修改我的Crystal报告,将其作为输入参数。存储过程以

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

这些报告大部分将使用ColdFusion或C.net调用,因此我认为在表类型中添加ID不会有问题。但我不知道如何在Crystal中定义这个参数。“创建新参数向导”中的类型列表非常少。

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

您的第一个想法是将表格作为逗号分隔的字符串输入。 或 将过程的输出保存到SQL Server中的临时表并导入该表。
通常,运行过程的Crystal报告是通过将报告指向该过程来创建的-该过程所需的任何参数都会在报告中自动生成。如果您在Crystal Reports designer中没有生成表输入参数的报表,那么我认为您不能这样做

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

创建一个表来保存会话ID和输入值, 在运行报告之前,使用会话ID和所需的输入值填充表, 将会话ID作为参数传递给报表, 将会话ID作为参数从报表传递给过程, 编写过程以根据会话ID从新表中选择输入值,并在运行报告后删除会话ID的条目?
据我所知,这是不可能的。Crystal不会从其他应用程序(如SQL Server)中获取它无法识别的数据类型。

如果存储过程需要参数,Crystal不需要指定它们吗?这并不是说我最终不会使用逗号分隔的字符串,而是更重要的一点是,您没有正确使用参数。如果我要使用Crystal,而存储过程需要参数,这似乎就是参数的重点。啊,我没有意识到存储过程需要参数,即使你明确地说了。在这种情况下,参数是否绝对需要由Crystal生成?如果先运行proc,向它提供存储在sql server上的查询,然后运行Crystal,会怎么样?