需要用户在 Reporting Services 报表中插入值

Posted

技术标签:

【中文标题】需要用户在 Reporting Services 报表中插入值【英文标题】:Need users to insert values in a Reporting Services Report 【发布时间】:2015-03-26 09:11:39 【问题描述】:

我需要用户能够将值列表(全部用于一列)粘贴到报告服务报告中。

然后,此列表将被插入到一个临时表中,并且该临时表与我的查询保持连接。

我要查找的结果集是 NULL 计数,以指示数据库中缺少多少这些值(它们是 ID)以及存在多少。从那里,它还将返回可用 ID 的详细信息。

我可以做第二部分,但我很难通过 Reporting Services 将列表(比如 50 行)输入到临时表中。

最终用户无权访问 SQL,最好在粘贴到报告参数之前对其值进行少量调整(添加括号等)。

有什么想法吗?

【问题讨论】:

请记住,参数的最大长度为 2000 个字符。 【参考方案1】:

    创建一个表值函数,它接受两个参数,一个 varchar(max) 字符串和一个分隔符。在函数中,将提供的分隔符上的字符串解析为行。

    create FUNCTION [dbo].[ufn_MakeTableFromLIst]
    (
    @LIST varchar(max), 
    @DELIMITER char(1)= ','
    )
    
    RETURNS @RETURN_TABLE TABLE (Param varchar(4000))
    
    AS 
    BEGIN
    
    Declare @POS int,
    @PIECE varchar(4000)
    
    Set @LIST = ltrim(rtrim(@LIST)) + @DELIMITER
    Set @POS = charindex(@DELIMITER, @LIST, 1)
    
    -- parse the string into a table
    if REPLACE(@LIST, @DELIMITER, '') <> ''
    begin
    
    WHILE @POS > 0
    begin
    
    SET @PIECE = LTRIM(RTRIM(LEFT(@LIST, @POS - 1)))
    IF @PIECE <> ''
        begin
    
        INSERT INTO @RETURN_TABLE (param) VALUES (CAST(@PIECE AS varchar(4000)))
    
        end
    
    SET @LIST = RIGHT(@LIST, LEN(@LIST) - @POS)
    SET @POS = CHARINDEX(@DELIMITER, @LIST, 1)
    
    END
    End
    RETURN
    

    在您的报告中创建两个参数以接受分隔字符串和分隔符。然后,客户端将能够为您提供他们可用的格式,只要他们在字符串中具有一致的分隔符。

    你的左或右加入并计算你的空值。

【讨论】:

SELECT [Param] AS OrderID INTO #a FROM ServerName.[dbo].[ufn_MakeTableFromList](@LIST,@DELIMITER)【参考方案2】:

您可以在报告中提供一个多值参数,该参数将获取所有 ID 的列表,并且将根据他们的意愿选择用户。否则,您可以提供一个纯文本框参数,他们将在其中键入所有 ID,并用逗号分隔。

稍后你可以用这个参数值调用一个 Proc 并在 proc 中做你想做的事情。如果这对您有帮助,请告诉我。

【讨论】:

以上是关于需要用户在 Reporting Services 报表中插入值的主要内容,如果未能解决你的问题,请参考以下文章

如果小于0设置为Null / Blank - SQL Reporting Services

Reporting Services 将用户添加到角色

在 SQL / Reporting Services 中使用参数限制用户访问

Reporting Services - 用户管理和安全配置

用于授予 SQL Server Reporting Services 用户权限的 SQL 脚本

如何在 Reporting Services 2008 r2 环境中管理 Kerberos 身份验证问题