NGB*_*NGB 1 sql birt where-clause
在我的报告查询中,我有一个where子句,需要根据前端选择的数据动态替换.
查询类似于:
哪里?=?
我已经有一个替换值的代码 - 我创建了报告参数并链接到了值?在查询中.
示例: name =?
来自前端的任何名称值都会替换?在where子句中 - 这很好用.
但现在我需要替换整个子句(其中?=?).我应该创建两个参数并将它们链接到'?' ?
不,遗憾的是,大多数数据库引擎不允许使用查询参数来处理动态列名.这是出于安全考虑.
因此,您需要在查询中保留任意列名:
where name=?
Run Code Online (Sandbox Code Playgroud)
然后在数据集的"beforeOpen"脚本中用报告参数值替换"name":
this.queryText=this.queryText.replace("name",params["myparameter"].value);
Run Code Online (Sandbox Code Playgroud)
为防止SQLIA,我建议在此脚本中测试参数的值.有很多方法可以做到这一点,但白名单是最强的测试,例如:
var column=params["myparameter"].value;
if (column=="name" || column=="id" || column=="account" || column=="mycolumnname"){
this.queryText=this.queryText.replace("name",column);
}
Run Code Online (Sandbox Code Playgroud)