【发布时间】:2010-02-02 03:18:39
【问题描述】:
我工作的公司正在将 MacolaES 用于 ERP 系统。 SQL Server 数据库的结构使得当事物不再被视为活动时,它们会从一组“活动”表移动到一组“历史”表。这有助于保持“活动”表足够小,以便查询快速返回。另一方面,历史表是巨大的。适当的列在这些表中被索引,如果您查询特定的内容,它会快速返回。
问题是当您制作水晶报表时,它会提示用户输入参数。由于我不知道的原因,Crystal 参数不会转换为 SQL 参数,因此您最终会查询从内部连接的订单标题历史记录表中的所有内容到订单行历史记录表中的所有内容,这会导致超过 800 万行。
有没有办法让 Crystal Reports 使用 SQL 查询中的参数,而不是加载所有记录并在事后进行过滤?我在某处读到存储过程应该可以工作,但我很好奇是否可以使用普通的参数化查询来节省我的时间。
这里是选择公式:
(
trim({Orderheader.ord_no}) = {?Order No}
)
and
(
{Orderheader.ord_type} = 'O'
)
and
(
{orderlines.ord_type} = 'O'
)
【问题讨论】:
-
这取决于记录选择公式的类型以及是否可以转换为sql where子句。您是否使用了任何不能转换为 sql 的特殊运算符,例如
if或任何水晶函数? -
您是否尝试从您的公式中删除修剪?
-
修复了它,但是因为订单号是 varchar(8) 并且我们所有的订单号只有六个字符长,我认为这对我们不起作用。看起来我必须使用存储过程。我给了你积分。
-
@Scott:阅读我放在答案底部的 SQL 表达式链接。这将允许您使用 RTRIM SQL 函数并仍然将公式推送到数据库。
-
太棒了。我也将开始在其他报告中使用 SQL 表达式。
标签: stored-procedures crystal-reports parameters