【发布时间】:2015-12-27 01:34:39
【问题描述】:
我知道存在与此错误有关的问题。但我的情况看起来不同!
我正在创建一个 SSRS2012 报告,该报告可以手动输入 UserID 编号(例如 15、130 等)作为 IC_ID。我想确保当输入为空时,报告可以显示所有 IC_ID。我尝试了两种方法来接近它。
数据来源:Oracle Sql Developer,表:IC,列:IC_ID 数据类型:NUMBER
参数:用户ID,数据类型:整数,允许空值。
------------方法一:----------------
SSRS数据集查询,我试过了:
select * from IC
where IC_ID=to_number(COALESCE(:UserIDs, IC_ID))
select * from IC
where IC_ID=to_char(COALESCE(:UserIDs, IC_ID))
select * from IC
where IC_ID=COALESCE(:UserIDs, IC_ID)
但都失败并出现相同的错误:NUMBERORA-00932 预期 CHAR 得到了 NUMBER。当我在 Oracle 数据库中运行它们时,显示与上述相同的错误。所以我想问题是如何使数据类型一致,列IC_ID数据类型为NUMBER,如果我将参数UserIDs设置为Integer,为什么仍然不一致?
PS:当我只使用查询时:
**select * from IC where IC_ID=(:UserIDs)**
无论我将参数数据类型设置为文本还是整数,报告都能正常工作并显示我手动输入的任何 IC_ID 值的信息。但是当参数为空时它没有显示数据!
---------方法2---------
SSRS数据集查询,我试过了:
select * from IC
where IC_ID=(:UserIDs) or (:UserIDs) IS NULL
因错误而失败:试图读取或写入受保护的内存。这通常表明其他内存已损坏。当我在 Oracle 中运行此查询时,它运行良好且没有错误,无论我将数字或 null 传递给 (:UserIDs)。 所以我猜问题是如何在 SSRS 数据集查询中使用 (:UserIDs)TWICE。
我很确定这不是因为内存限制,因为当根本没有参数时,此报告运行良好,显示所有 IC_ID 信息。 似乎它不允许一个参数在数据集查询中多次显示,每当我尝试类似:select * from IC where IC_ID=(:UserIDs) AND IC_SubID=(:UserIDs) 时,它都会失败内存损坏错误。 但如果 (:UserIDs) 只在查询中出现一次,它就可以正常工作。
---------方法3----
有些帖子说为了在参数为空时显示所有信息,我们可以添加所有IC_ID的列表作为参数的默认值。我认为它不适用于这种情况,因为我的数据集查询实际上非常复杂,从很长的 cte 开始。将整个 cte 查询作为默认值添加到列表中会太复杂和太慢。
如果有人可以就如何解决上述任何错误提供一些帮助,或者告诉我在参数为空时显示所有信息的其他方法,我将不胜感激!
谢谢
【问题讨论】:
-
您是否尝试过在 oracle 数据库中执行此查询。该错误不是由 SSRS 引起的,而是一个 oracle 错误。在继续使用 SSRS 之前,我会先调试蟾蜍之类的东西
-
感谢您的回答。在 oracle 中,这些查询: select * from IC where IC_ID=to_number(COALESCE(:UserIDs, IC_ID)) select * from IC where IC_ID=to_char(COALESCE(:UserIDs, IC_ID)) select * from IC where IC_ID=COALESCE(: UserIDs, IC_ID) 显示与 ssrs 中相同的错误:不一致的数据类型,预期的 CHAR 得到了 NUMBER。
-
但是这个查询:select * from IC where IC_ID=(:UserIDs) or (:UserIDs) IS NULL 在Oracle中运行良好,没有显示错误,无论我在参数中输入null还是数字.所以我想如果我用方法1,数据类型是个问题;如果我使用方法 2,如何在 ssrs 数据集查询中使用 (:UserIDs) 两次是一个问题!再次感谢您的建议,
标签: sql-server oracle reporting-services ssrs-2008 ssrs-2012