我需要用户能够将值列表(全部为一列)粘贴到报告服务报告中。
然后,该列表将被插入到一个临时表中,并且该临时表加入了我的查询。
我正在寻找的结果集是一个 NULL 计数,以指示数据库中缺少多少这些值(它们是 ID)以及存在多少。从那里,它还将返回可用 ID 的详细信息。
我可以做第二部分,但我很难通过 Reporting Services 将列表(比如 50 行)输入到临时表中。
最终用户无权访问 SQL,最好在粘贴到报告参数之前对其值进行少量调整(添加括号等)。
有任何想法吗?
我需要用户能够将值列表(全部为一列)粘贴到报告服务报告中。
然后,该列表将被插入到一个临时表中,并且该临时表加入了我的查询。
我正在寻找的结果集是一个 NULL 计数,以指示数据库中缺少多少这些值(它们是 ID)以及存在多少。从那里,它还将返回可用 ID 的详细信息。
我可以做第二部分,但我很难通过 Reporting Services 将列表(比如 50 行)输入到临时表中。
最终用户无权访问 SQL,最好在粘贴到报告参数之前对其值进行少量调整(添加括号等)。
有任何想法吗?
创建一个表值函数,它接受两个参数: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
在您的报告中创建两个参数以接受分隔字符串和分隔符。然后,客户端将能够为您提供他们可用的格式,只要他们在字符串中具有一致的分隔符。
做你的左或右加入并计算你的空值。
您可以在报告中提供一个多值参数,该参数将获取所有 ID 的列表,并且将根据他们的意愿选择用户。否则,您可以提供一个纯文本框参数,他们将在其中键入所有 ID,并以逗号分隔。
稍后您可以使用此参数值调用 Proc 并在 proc 中执行您想要执行的操作。让我知道这是否对您有帮助。