查询参数的值表达式包含错误;从类型 Object() 到类型“String”的转换无效

Posted

技术标签:

【中文标题】查询参数的值表达式包含错误;从类型 Object() 到类型“String”的转换无效【英文标题】:Value expression for the query parameter contains an error; Conversion from type Object() to type 'String' is not valid 【发布时间】:2016-01-28 15:30:41 【问题描述】:

我在尝试执行报告时遇到此错误。我正在传递一个多值参数 (OrderNo),但无法使其工作。参数是订单号,查询获取该订单号并返回有关该订单的一些信息并将其放在报告中。

目前,我的参数允许多个值,并通过查询填充可用值。

在我的数据集查询中,我的 where 语句说:

WHERE x.order_no IN (@OrderNo)

我的数据集参数值为:

=SPLIT(Parameters!OrderNo.Value, ",")

我只需要让这个查询返回多行,每个订单一个#。然后我可以将它加入到报告中。

【问题讨论】:

如果您的参数是多值的,您不必拆分它。 取出拆分并将参数恢复为默认值,我收到错误:ORA--00936 缺少表达式 然后我可以将 where 子句更改为 WHERE x.order_no IN (:OrderNo) 并手动输入订单但不返回任何结果。 如何填充您的参数? 目前它允许多个值,可以从一个查询填充的列表中选择,该查询从数据库中提取所有订单#s 【参考方案1】:

我在使用带有多值参数的存储过程时遇到了这个问题。我要做的是创建一个拆分字符串函数Like This One.

CREATE FUNCTION [dbo].[fnSplitString] 
( 
@string NVARCHAR(MAX), 
@delimiter CHAR(1) 
) 
RETURNS @output TABLE(splitdata NVARCHAR(MAX) 
) 
BEGIN 
SET @string=REPLACE(@string,'(,)','$$')
DECLARE @start INT, @end INT 
SELECT @start = 1, @end = CHARINDEX(@delimiter, @string) 
WHILE @start < LEN(@string) + 1 BEGIN 
IF @end = 0 
SET @end = LEN(@string) + 1 

INSERT INTO @output (splitdata) 
VALUES(REPLACE(SUBSTRING(@string, @start, @end - @start),'$$','(,)')) 
SET @start = @end + 1 
SET @end = CHARINDEX(@delimiter, @string, @start) 

END 
RETURN 
END 

在 where 子句中像这样使用它。

  Where something IN (select *from dbo.fnSplitString('Querying SQL Server',','))

【讨论】:

我对 procs 真的很缺乏经验。我应该把它放在 s-s-rS 报告中的哪个位置? 在数据库中创建函数,然后使用我在其中提供的 where 子句并修改其中包含多值参数的 where 子句,使其看起来像它。 有没有办法在当前框架中应用这种拆分策略,而不引入proc?

以上是关于查询参数的值表达式包含错误;从类型 Object() 到类型“String”的转换无效的主要内容,如果未能解决你的问题,请参考以下文章

Java JPA 错误;您试图从查询字符串中设置类型类数据预期类型 int 的值

org.jooq.Query.getBindValues() 返回的 List<Object> 是不是包含类型安全的对象 - 对于每个查询参数?

如何通过 FromQuery 参数将“System.Object”类型传递给控制器

从Object对象中读取属性的值

使用 Object.clone() 的错误

媒体查询