Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reporting services 如何创建一个BIRT数据集,该数据集可接受多个(CSV)值,并可用于;在;select语句中的子句_Reporting Services_Birt - Fatal编程技术网

Reporting services 如何创建一个BIRT数据集,该数据集可接受多个(CSV)值,并可用于;在;select语句中的子句

Reporting services 如何创建一个BIRT数据集,该数据集可接受多个(CSV)值,并可用于;在;select语句中的子句,reporting-services,birt,Reporting Services,Birt,我试图在BIRT报告中创建一个数据集,该数据集包含一个带有“in”子句的select语句,并使用一个接受多个值的BIRT参数传递一个逗号分隔值来代替“?” 例如:从ID在(?)中的表格中选择* 我尝试在我的数据集中“从ID所在的表中选择*(params[“paramer_name”].value)”,但它不起作用 我不想使用BIRT数据集的内置过滤器,因为在查询中使用“in”子句在很大程度上降低了数据库服务器中的查询成本 有没有一种简单的方法可以在不添加长java脚本的情况下执行相同的操作 仅供

我试图在BIRT报告中创建一个数据集,该数据集包含一个带有“in”子句的select语句,并使用一个接受多个值的BIRT参数传递一个逗号分隔值来代替“?”

例如:从ID在(?)中的表格中选择*

我尝试在我的数据集中“从ID所在的表中选择*(params[“paramer_name”].value)”,但它不起作用

我不想使用BIRT数据集的内置过滤器,因为在查询中使用“in”子句在很大程度上降低了数据库服务器中的查询成本

有没有一种简单的方法可以在不添加长java脚本的情况下执行相同的操作

仅供参考:用户选择的参数列表来自另一个数据集,我想使用所选值作为另一个数据集的输入


非常感谢您的帮助…

使用常规SQL参数“?”无法完成此操作

一种解决方法是用查询中的默认值替换此“?”,并在数据集的“beforeOpen”脚本中动态插入一个以逗号分隔的值列表:

默认查询

假设ID的数据类型是整数,设置如下查询(当然,这里使用有效的ID可以预览数据):

数据集的“打开前”脚本:

   this.queryText=this.queryText.replaceAll('1000',params["parameter_name"].value.join(","));
这样,如果“parameter_name”返回3个值110012001300,则发送到数据库的查询将为:

select * from table where ID in ( 1100,1200,1300)

如果ID的数据类型是一个字符串,这是类似的,我们只需要使用引号来播放一点。然而,对于字符串类型,这种处理使SQL注入攻击成为可能,我们应该首先检查参数值是否与我们期望的一样。

对于常规SQL参数“?”,我们无法做到这一点

一种解决方法是用查询中的默认值替换此“?”,并在数据集的“beforeOpen”脚本中动态插入一个以逗号分隔的值列表:

默认查询

假设ID的数据类型是整数,设置如下查询(当然,这里使用有效的ID可以预览数据):

数据集的“打开前”脚本:

   this.queryText=this.queryText.replaceAll('1000',params["parameter_name"].value.join(","));
这样,如果“parameter_name”返回3个值110012001300,则发送到数据库的查询将为:

select * from table where ID in ( 1100,1200,1300)

如果ID的数据类型是一个字符串,这是类似的,我们只需要使用引号来播放一点。然而,对于字符串类型,这种处理方式使SQL注入攻击成为可能,我们应该首先检查参数值是否与我们期望的一样。

我花了数小时才找到这么简单的东西。使用
this.queryText.replaceAll('1000',“'”+params[“parameter_name”].value.join(“,”+”)
当你处理字符串/varchar/字符等时。我花了几个小时才找到这么简单的东西。当你处理字符串/varchar/字符等时,请使用
this.queryText.replaceAll('1000',“'”+params[“parameter_name”].value.join(“,”+“”)