0

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

然后,该列表将被插入到一个临时表中,并且该临时表加入了我的查询。

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

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

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

有任何想法吗?

4

2 回答 2

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

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

于 2015-03-26T12:41:02.130 回答
0

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

稍后您可以使用此参数值调用 Proc 并在 proc 中执行您想要执行的操作。让我知道这是否对您有帮助。

于 2015-03-26T12:26:53.733 回答