需要用户在 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
在 SQL / Reporting Services 中使用参数限制用户访问
Reporting Services - 用户管理和安全配置