如何解决使用 SSRS 传递的分隔符拆分字符串 - 从参数中选择多个值
我有这个存储过程,我试图从参数 Bkt
中选择多个值。当我从 Bkt
中选择一个值但 Bkt
具有我希望能够在 SSRS 中选择的不同值时,这可以正常工作。
例如,在这个 screenshot 中,您可以看到 CFI
中有 DPR
和 Bkt
。我希望能够在 CFI
中同时选择 DPR
和 Bkt
。
我需要保留存储过程,所以我试图拆分 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
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 举报,一经查实,本站将立刻删除。