sql-server - DataSet SSRS 中的 STRING_SPLIT 函数替代方案是什么
问题描述
DataSet:dsStudent(报表中的下拉菜单)
DECLARE @gid VARCHAR(36) = CONVERT(VARCHAR(36), NEWID());
SELECT CAST(StudentId AS VARCHAR(MAX))+@gid AS StudentId, StudentName
FROM dbo.Student1;
DataSet:dsStudentFilter(用于捕获从下拉列表中选择的数据)
SELECT StudentName
FROM Student1
WHERE StudentId IN
(
SELECT REPLACE(b.value('text()[1]', 'NVARCHAR(MAX)'), RIGHT(b.value('text()[1]', 'NVARCHAR(MAX)'), 36), '')
FROM
(
VALUES
(CAST('<x>' + REPLACE(@StudentId, ',', '</x><x>') + '</x>' AS XML))
) A (a)
CROSS APPLY a.nodes('/x') B(b)
);
现在,当我预览报告时,出现以下错误:
报告设计:
在 SSRS 报告的 dsStudentFilter DataSet 中,我想做如下的事情:
DECLARE @StudentId VARCHAR(MAX)
= '1111112EE300718-79A4-4260-A5E9-22B7CA71998,1111122EE300718-79A4-4260-A5E9-22B7CA71998';
SELECT StudentName
FROM Student1
WHERE StudentId IN
(
SELECT value
FROM STRING_SPLIT(REPLACE(@StudentId, RIGHT(@StudentId, 36), ''), ',')
);
但我不能在 DataSet 中使用 STRING_SPLIT 是否有其他选择?
表中数据:
上面的查询将显示 Jay 和 Sam。
解决方案
如果允许这样做,您可以在 SQL-Server 上创建内联表值函数。另一个机会是使用存储过程并IN
在动态 SQL 中创建 -clause ...
或者您可以使用这种方法进行内联拆分:
DECLARE @StudentId VARCHAR(MAX) = '3,5,6,7';
SELECT o.*
FROM sys.objects o
WHERE o.object_id IN
(
SELECT b.value('text()[1]','int')
FROM (VALUES(CAST('<x>' + REPLACE(@StudentId,',','</x><x>') + '</x>' AS XML)))A(a)
CROSS APPLY a.nodes('/x') B(b)
);
值列表从 to 传输3,5,6,7
到<x>3</x><x>5</x><x>6</x><x>7</x>
,然后作为 XML 处理...
暗示:
对于您的示例,您将不得不使用uniqueidentifier
而不是int
inside.value()
推荐阅读
- python - 无法使用年、月、日、小时和分钟列创建 DateTime 列
- newline - 电源自动化流程 - html 到文本 - 奇怪的新行
- apache-kafka - Kafka Producer 中的消息重试机制
- function - 将日期时间作为函数参数传递
- javascript - 如果使用 RegEx 中没有任何内容,请删除双撇号
- flutter - 如果选择的文件名没有扩展名,我们将如何在颤振中获取文件 mime 类型
- postgresql - Sql 将查询结果保存到在 postgres docker 上运行的变量
- python-3.x - ubuntu上的matplotlib,没有输出
- app-store - 如何在 iPhone 应用商店中查看畅销应用?
- mql5 - MQL5 中的 10015 错误(无效价格)元交易者