努力在动态查询中使用IN运算符和列表参数。 Jaspersoft Studio

时间:2018-10-04 19:33:50

标签: sql-server jasper-reports

我成功地在带有$X{IN, column_name, list_parameter_name}参数的简单报表查询中使用了java.util.collection格式:

Select * from table where $X{IN, column_name, list_parameter_name}

但是,当我尝试在动态查询的引号中使用$X{IN, column_name, list_parameter_name}时,会出现错误消息:

declare @sql_query nvarchar(4000)

set @sql_query = 'select * from wo_hdr where $X{IN, wg_name, wg_name_list} ' 

EXEC sp_executesql 

@sql_query

"Error preparing statement for executing the report query: Caused by: java.sql.SQLException: Invalid parameter index 1. "

我尝试将参数放入SQL变量中,但是它说查询中不支持参数类型。

我尝试使用$P!{wg_name}代替,但是列表用[]而不是()括起来,因此查询出现语法错误。

有人知道如何做到这一点吗?

谢谢

克里斯

1 个答案:

答案 0 :(得分:0)

我成功使用了 像

这样的查询
select t.* from 
Table1 t
where
t.ID in ($P!{MS_RECID})
  • $ P!{...}语法按原样插入值,不进行类型检查。我们最好提防sql注入。
  • 参数
  • MS_RECID 的类型是字符串。 因此参数的默认值用双引号引起来。 (check image
  • 运行报告时,显示/输入的参数值没有引号就可以了(check image