微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 SSRS 传递的分隔符拆分字符串 - 从参数中选择多个值

如何解决使用 SSRS 传递的分隔符拆分字符串 - 从参数中选择多个值

我有这个存储过程,我试图从参数 Bkt 中选择多个值。当我从 Bkt 中选择一个值但 Bkt 具有我希望能够在 SSRS 中选择的不同值时,这可以正常工作。

例如,在这screenshot 中,您可以看到 CFI 中有 DPRBkt。我希望能够在 CFI 中同时选择 DPRBkt

我需要保留存储过程,所以我试图拆分 SSRS 传递的分隔字符串。我想不通。我尝试通过使用参数映射部分中的表达式更改分隔符,但我也无法弄清楚。我真的很迷茫。

这是我的存储过程

@Press varchar(10),@BKT varchar (10)
AS
BEGIN

SET NOCOUNT ON;
select * From (
Select FAC,SPEC_NEW.Tread_Code,Case When cosw.tread_code = spec_new.tread_code Then 'Scheduled' else 'Alternative' end AS Size,COUNT(distinct loc.serial )  QTY,ROW_NUMBER() OVER (
                 PARTITION BY FAC,SPEC_NEW.Tread_Code
                 ORDER BY fac,Case When cosw.tread_code = spec_new.tread_code Then 'Scheduled' else 'Alternative' end DESC,SPEC_NEW.Tread_Code
           ) AS r_num
FROM [TireTrack].[dbo].[cos_work] cosw with (nolock)
Inner Join [SharedData].dbo.spec_master Spec with (nolock) On spec.spec=Cosw.SPEC
Inner Join [SharedData].dbo.spec_master SPEC_NEW with (nolock) On SPEC_NEW.ARTICLE=SPEC.article
Inner Join [DataWarehouse].[dbo].[Locator] LOC with (Nolock) ON LOC.SPEC=SPEC_NEW.SPEC
Where Cosw.FAC=@press and Loc.BKT = @bkt
GROUP BY FAC,cosw.Tread_Code,SPec_new.Tread_Code,Loc.Bkt
) as a
where r_num=1
order by FAC



END

我有一个存储过程,在那里我得到了 PressBkt

AS
BEGIN
SET NOCOUNT ON;
Select distinct FAC as Press,Loc.BKT as Bkt
FROM [TireTrack].[dbo].[cos_work],[DataWarehouse].[dbo].[Locator] LOC 
END

我使用 this link 作为参考

解决方法

这是一个概念性示例,说明如何处理存储过程的逗号分隔参数。

SQL

DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY,vehicleMake VARCHAR(20));
INSERT INTO @tbl (vehicleMake) VALUES
('Chevrolet'),('Tesla'),('Audi'),('Nissan');

DECLARE @ParameterList VARCHAR(max) = '1,2';

-- Method #1
-- XML and XQuery
-- SQL Server 2008 onwards
DECLARE @separator CHAR(1) = ',';

;WITH rs AS
(
    SELECT xmldata = TRY_CAST('<root><r>' + 
         REPLACE(@ParameterList,@separator,'</r><r>') + '</r></root>' AS XML)
)
SELECT tbl.* 
FROM rs CROSS APPLY xmldata.nodes('/root/r/text()') AS t(c)
    INNER JOIN @tbl AS tbl ON tbl.id = c.value('.','INT');

-- Method #2
-- STRING_SPLIT()
-- SQL Server 2016 onwards
SELECT tbl.*
FROM @tbl AS tbl INNER JOIN 
     STRING_SPLIT(@ParameterList,',') AS ss
     ON tbl.ID = ss.value;

输出

+----+-------------+
| ID | vehicleMake |
+----+-------------+
|  1 | Chevrolet   |
|  2 | Tesla       |
+----+-------------+

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。