Bun*_*Bun 1 birt reporting-services
我试图在BIRT报告中创建一个数据集,其中包含带有"IN"子句的select语句,并用逗号分隔值代替"?" 使用接受多个值的BIRT参数.
例如:select*from table where ID in(?)
我尝试在我的数据集"select*from table in where in in(params ["paramer_name"].value)"中添加此项,但它无效.
我不想使用内置的BIRT数据集过滤器,因为在查询中使用"IN"子句可以在我的数据库服务器中大大降低查询成本.
有没有一个简单的方法来做同样的事情而不添加长java脚本???
仅供参考:用户选择的参数列表来自另一个数据集,我想将所选值用作另一个数据集的输入.
非常感谢你的帮助...
我们不能使用常规SQL参数'?'来执行此操作.
解决方法是替换这个'?' 通过查询中的默认值,并在数据集的"beforeOpen"脚本中动态注入相应的逗号分隔值列表:
默认查询
假设ID的数据类型是一个整数,请像这样设置查询(当然这里使用有效的ID来预览数据):
select * from table where ID in ( 1000 )
Run Code Online (Sandbox Code Playgroud)
数据集的"beforeOpen"脚本:
this.queryText=this.queryText.replaceAll('1000',params["parameter_name"].value.join(","));
Run Code Online (Sandbox Code Playgroud)
这样,如果"parameter_name"返回3个值1100,1200,1300,则发送到数据库的查询将是:
select * from table where ID in ( 1100,1200,1300)
Run Code Online (Sandbox Code Playgroud)
如果ID的数据类型是String,则类似,我们只需要使用引号进行一些操作.但是对于String类型,这种处理使得SQL注入攻击成为可能,我们首先应该检查参数值是否与我们期望的一样.
| 归档时间: |
|
| 查看次数: |
3315 次 |
| 最近记录: |