【问题标题】:Pad user input with zeros in a multiple value parameter在多值参数中用零填充用户输入
【发布时间】:2017-05-01 14:04:29
【问题描述】:

有没有办法在多值参数中填充数字以使它们的长度为 8 个字符?现在我正在使用:

=Right("00000000" & 参数!Accounts.Value,8)

在一个不可见的参数中,然后将该参数传递给我的查询的 in 部分。当我有多个值时,它可以正常工作,但是一旦我打开多个值,我就会收到错误

报表参数“ActualAccounts”的 DefaultValue 表达式包含错误:未为字符串“00000000”和类型“Object()”定义运算符“&”。”

我希望用户能够粘贴以下帐户列表:

93874
93932128
3838

然后它查询数据库为

00093874
93932128
00003838

【问题讨论】:

    标签: reporting-services ssrs-2012


    【解决方案1】:

    这是一种适合您的方法。

    首先,从this 问题的答案中获取udf_Split 用户定义函数(UDF)。使用此 UDF,您可以将分隔字符串作为参数传递,它将返回一个表,其中每个值都有一行。当涉及到多值参数时,这就是 SSRS 将数据发送到 SQL Server 的方式。

    一旦你有了它,那么你需要做的就是以下列方式使用该 UDF。

    DECLARE @ActualAccounts varchar(100) = '93874,93932128,3838'
    
    SELECT RIGHT('00000000' + RTRIM(LTRIM(Value)), 8) AS Accounts
        FROM dbo.udf_Split(@ActualAccounts, ',');
    

    结果:

    Accounts
    --------
    00093874
    93932128
    00003838
    

    然后你可以在报表的 SQL 中使用它

    SELECT *
    FROM Accounts
    WHERE AccountNumber IN (SELECT RIGHT('00000000' + RTRIM(LTRIM(Value)), 8)
            FROM dbo.udf_Split(@ActualAccounts, ','));
    

    此答案假定 SSRS 参数的名称是 ActualAccounts。如果您正在使用它,您应该能够将其放入存储过程中。 如果您也将 SQL 嵌入到 RDL 中,它应该可以直接使用 SQL

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回复!到目前为止,这似乎是我正在寻找的东西,除非用户输入多个参数时,我使用 udf.Split 返回的参数太多。例如,我输入 93874 按回车键,然后按 93932128 然后回车。然后该参数将其添加到 93874、9392128 并得到该错误。
    • 那么,您正试图在嵌入在 RDL 中的 SQL 中使用它,对吗?没有存储过程?如果是这样,您能否将代码移至 SP? :) 我开始认为这可能是你最好的选择。
    • 这是正确的,我的主要 SQL 查询已嵌入到报告中。不过,我确实在我们的一个数据库中创建了该函数。如果可能,我们希望将其包含在报告中。
    • 知道了。我错误地告诉您这将适用于嵌入式 SQL,对此我深表歉意。不幸的是,它只适用于存储过程。愿意在这方面灵活一点,并使用 SP 吗?我想不出另一种解决方案。
    • 是的,这就是为什么我最初试图将用户输入的参数(Accounts)传递给另一个不可见的参数(ActualAccounts)并使用表达式填充零。但是我不确定我是否可以通过报告中的代码来做到这一点。至于存储过程,如果用户从excel中的单独行复制并粘贴帐户到报告中,那么该存储过程是否可以使用多个值? account1 account2 account3 etc..
    猜你喜欢
    • 2021-08-23
    • 2016-01-12
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 2018-05-22
    相关资源
    最近更新 更多