查询参数的值表达式包含错误;从类型 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> 是不是包含类型安全的对象 - 对于每个查询参数?