wu8829 发表于 2016-7-17 10:23:16

关于配置数据集的bug

本帖最后由 Lenka.Guo 于 2016-7-29 09:38 编辑

今天配置数据集,SQL语句如下:

SELECTGoods_Name.Goods_Code, Goods_Name.Goods_Name,Goods_Name.Goods_Standards, Goods_Name.Goods_Unit, Goods_Name.Goods_Made,Goods_Name.Goods_Brand, Goods_Name.Goods_Memo,Stowage.Goods_MountFROM Goods_Name INNER JOIN Stowage ON Goods_Name.Goods_Code = Stowage.Goods_Code Where Stowage.ID in (@StowageID)order by desc

当@StowageID为某个值,例如:2860,不会出错,但当 @StowageID为序列值,例如:2860,2861,2862时,就出类型转换错误。


通过查询资料,将SQL语句改为:

exec('SELECTGoods_Name.Goods_Code, Goods_Name.Goods_Name,Goods_Name.Goods_Standards, Goods_Name.Goods_Unit, Goods_Name.Goods_Made,Goods_Name.Goods_Brand, Goods_Name.Goods_Memo,Stowage.Goods_MountFROM Goods_Name INNER JOIN Stowage ON Goods_Name.Goods_Code = Stowage.Goods_Code Where Stowage.ID in ('+ @StowageID +')order by desc')

依然有错误,但在SQL SERVER测试中,这句SQL是能正常运行的。


因此,请工程师帮忙解决下。




dexteryao 发表于 2016-7-18 09:23:23

您好,请问报什么错误可否截图发过来
使用exec 方法是一定要注意传递参数正确,特殊符号可能会造成拼接的sql错误,同时这种发放也有SQL注入的风险。
另一种方法是自定义一个Split方法,将字符串分割后然后以表格形式返回,这个方法是公用的,其他脚本也都可以使用。
CREATE   FUNCTION .
(
@c VARCHAR(MAX) ,
@split VARCHAR(50)
)
RETURNS @t TABLE ( col VARCHAR(50) )
AS
BEGIN
    WHILE ( CHARINDEX(@split, @c) <> 0 )
      BEGIN
            INSERT@t( col )
            VALUES( SUBSTRING(@c, 1, CHARINDEX(@split, @c) - 1) )
            SET @c = STUFF(@c, 1, CHARINDEX(@split, @c), '')
      END
    INSERT@t( col ) VALUES( @c )
    RETURN
END

SELECT A.*
FROM Table_A A
        INNER JOIN ('1,23,132,123',',') B
        ON A.id = b.col

Alice 发表于 2016-7-18 09:30:30

非常感谢您的反馈。
您的问题我们收到了,测试后给您反馈。

ZenosZeng 发表于 2016-7-18 09:43:06

您好,

方便把你的报表模板上传给我们看看吗,这样调试起来应该更容易找到原因。

多值过滤主要是需要设置参数的【允许多值】加上SQL语句使用 IN 过滤就可以了。

wu8829 发表于 2016-7-18 12:05:46

从第一种方法开始测试:将SQL语句改成:
SELECTGoods_Name.Goods_Code, Goods_Name.Goods_Name,Goods_Name.Goods_Standards, Goods_Name.Goods_Unit, Goods_Name.Goods_Made,Goods_Name.Goods_Brand, Goods_Name.Goods_Memo,Stowage.Goods_MountFROM Goods_Name INNER JOIN Stowage ON Goods_Name.Goods_Code = Stowage.Goods_Code Where Stowage.ID in (@StowageID)order by desc


并将@StowageID参数设置成“多值”,如图:




运行报表,当@StowageID参数为一个数,可以正常显示,如图:




但当@StowageID为序列时,就报错,如图:

wu8829 发表于 2016-7-18 12:07:38

本帖最后由 wu8829 于 2016-7-18 12:09 编辑

第二种方法,将SQL语句改成:

exec('SELECTGoods_Name.Goods_Code, Goods_Name.Goods_Name,Goods_Name.Goods_Standards, Goods_Name.Goods_Unit, Goods_Name.Goods_Made,Goods_Name.Goods_Brand, Goods_Name.Goods_Memo,Stowage.Goods_MountFROM Goods_Name INNER JOIN Stowage ON Goods_Name.Goods_Code = Stowage.Goods_Code Where Stowage.ID in ('+ @StowageID +')order by desc')

依然不行,SQL语句都无法保存,如图:

但其实这条语句在SQL SERVER里面直接运行是能正确执行,并得到相应结果的。




wu8829 发表于 2016-7-18 14:30:01

很着急啊很着急

dexteryao 发表于 2016-7-18 16:11:22

本帖最后由 dexteryao 于 2016-7-18 16:21 编辑

您好,您看下这篇博客
http://blog.gcpowertools.com.cn/ ... er_MultiValues.aspx
您是通过querystring传递的参数,在pageload 后通过代码解析您的参数,通过 下面代码设置给变量
      pagereport.Report.ReportParameters.DefaultValue.Values.Clear();      pagereport.Report.ReportParameters.DefaultValue.Values.Add("1");      pagereport.Report.ReportParameters.DefaultValue.Values.Add("2");      pagereport.Report.ReportParameters.DefaultValue.Values.Add("3");

wu8829 发表于 2016-7-18 16:27:23

本帖最后由 wu8829 于 2016-7-18 16:31 编辑

dexteryao 发表于 2016-7-18 16:11
您好,您看下这篇博客
http://blog.gcpowertools.com.cn/ ... er_MultiValues.aspx
您是通过querystring ...
你的回答算是答非所问吗?但还是谢谢你的热心

wu8829 发表于 2016-7-18 16:37:37

工程师呢?就没有官方工程师吗?
页: [1] 2
查看完整版本: 关于配置数据集的bug