【问题标题】:¿How to load a parameter in a query in quotes in BIRT?¿ 如何在 BIRT 的引号中加载查询中的参数?
【发布时间】:2021-12-17 18:28:15
【问题描述】:

我有一个用引号括起来的查询:

DECLARE @PivotQuery AS NVARCHAR(MAX),
        @PivotColumns AS NVARCHAR(MAX),
        @PivotNull AS NVARCHAR(MAX)
SELECT @PivotColumns= ISNULL(@PivotColumns + ',','') + QUOTENAME(DepId)
FROM (SELECT DISTINCT sp.DepId FROM SKDEP sp) AS Stock
SELECT @PivotNull 
    = ISNULL(@PivotNull + ',','')
    + 'ISNULL(' + QUOTENAME(DepId) + ', 0) AS '
    + QUOTENAME(DepId)
FROM (SELECT DISTINCT sp.DepId FROM SKDEP sp) AS Stock
SET @PivotQuery =
N'SELECT P.P, P.D, '+@PivotNull+'
FROM
        (
            select 
                s.prdid as P,
                p.prddsc as D,
                case when mstes=''S'' then sum(-MstCntDisp) else sum(MstCntDisp) end as Stock,
                s.DepId
                from SKMOV S
                join PRODUC P on s.PrdId=p.PrdId
                where s.mstsal>0 AND s.MstTpo=''S'' and s.PrdId=**''*TF033''**
                group by s.prdid, p.PrdDsc, s.MstES, s.depid
        ) AS t
PIVOT(sum(Stock)
FOR DEPID IN (' + @PivotColumns + ')) AS P'
EXEC sp_executesql @PivotQuery

在 where 子句中我需要用问号指定我的参数,所以:

and s.PrdId=?

但我不知道如何在将查询放在引号中时指定参数,因为它不接受它。

【问题讨论】:

  • documentation 包含 examples 关于如何参数化动态语句的信息。
  • 这能回答你的问题吗? EXEC sp_executesql with multiple parameters
  • @Larnu 但我的问题是如何在 BIRT 中传递参数并将查询带引号。
  • 两个链接都说明了如何将参数传递给动态语句。
  • 将其赋值给动态语句之外的变量,然后将所述变量作为参数传递。

标签: sql-server birt


【解决方案1】:

最后我这样解决了我的问题:

在where子句中,我传递一个字符串的值,

where s.mstsal>0 AND s.MstTpo=''S'' and s.PrdId=''PRODUCT_ID''

报告打开后(在选项卡脚本/beforeOpen 中),我将字符串值替换为参数。

this.queryText=this.queryText.replace("PRODUCT_ID",params["ID"].value);

并且有效!

【讨论】:

  • 虽然这可行,但它对 SQL 注入攻击是开放的,除非您可以绝对确定输入参数是干净的。
猜你喜欢
  • 2020-01-31
  • 2011-10-17
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多