【问题标题】:Creating a concatenated string in SSRS with values enclosed in single quotes在 SSRS 中使用单引号括起来的值创建连接字符串
【发布时间】:2015-01-30 14:08:43
【问题描述】:

我刚刚开始在 SSRS 中开发报告,如果可能的话,我希望能在此问题上提供一些帮助!我正在从 Dynamics 数据库中选择一个数据集,然后希望将它们传递给另一个数据集中引用的 SQL Server 存储过程,以从另一个数据库中检索数据。我创建了一个报表参数并将其设置为允许多个值,并从查询中检索其值并将其设置为我要检索的字段。

数据集如下所示:

U1234
U5678
U6789

在使用存储过程的数据集中,我设置了一个参数@pnum,并在参数值字段中使用Join 语句创建了一个表达式,如下所示:

Join(Parameters!pnum.Value, ", ")

当它被传递给存储过程时,它似乎正在传递一个格式如下的字符串:

'U1234, U5678, U6789'

而我想要实现的是:

'U1234', 'U5678', 'U6789'

这样我就可以在IN 语句中使用它们。有没有办法在 SSRS 中做到这一点?

非常感谢!

【问题讨论】:

    标签: reporting-services


    【解决方案1】:

    对于遇到此问题的其他人,问题中关于如何将值传递给存储过程以及如何使用它们的假设是不正确的。

    join 表达式传递的值将被格式化,在开始和结束时没有单引号:

    U1234, U5678, U6789
    

    此外,当作为单个字符串传递给存储过程时,它只能通过动态 SQL 用作in 列表。


    要解析并过滤传递的值,需要在分隔符上拆分字符串并插入到表中(临时或其他)以joined 到。

    可以使用以下逻辑找到合适的拆分here(尽管存在其他可能更适合您的需求):

    declare @xml as xml,@str as varchar(100),@delimiter as varchar(10)
    set @str='A,B,C,D,E'
    set @delimiter =','
    set @xml = cast(('<X>'+replace(@str,@delimiter ,'</X><X>')+'</X>') as xml)
    select N.value('.', 'varchar(10)') as value from @xml.nodes('X') as T(N)
    

    如果您不必将值传递给存储过程并且使用硬编码数据集(是否共享),您实际上可以直接使用参数值,而无需在查询中进行额外处理或添加join 表达式到报表中的参数值:

    select cols
    from tables
    where cols in(@MultiValueParameterName)
    

    【讨论】:

      【解决方案2】:

      您必须添加一个用引号括起来的额外字段。

      像这样:

      SELECT field1 AS display, '''' + field1 + '''' AS value
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-11
        • 2022-01-18
        • 1970-01-01
        相关资源
        最近更新 更多