我们目前正在升级我们用 C# 编写的当前数据导入过程。
作为升级过程的一部分,我们需要根据旧系统的结果检查重写的导入过程的结果。
我们所做的更改之一是将逗号分隔的列表拆分为另一个表中的行。这将使我们能够使用简单的连接过滤结果。
这是旧模式:
FormNumber MainCategories
1 blue,green,red
2 yellow,red,blue
3 white
我们将其标准化为:
FormNumber AttributeId Value
1 1 blue
1 1 green
1 1 red
2 1 yellow
2 1 red
2 1 blue
3 1 white
现在,我们的下一步是确认这两个过程的结果是否相同。其中一项检查是将旧流程的 MainCategories 字段与规范化表的结果进行比较。
最后,这将我们引向一个问题:如何创建新模式的逗号分隔列表以与旧模式的值进行比较。
我们在这里尝试了@Ritesh 提出的 XMLPath 解决方案:Concatenate many rows into a single text string?
这是改编的sql语句:
Select distinct ST2.FormNumber,
(Select ST1.Value + ',' AS [text()]
From cache.ArtifactAttribute ST1
Where ST1.FormNumber= ST2.FormNumber
ORDER BY ST1.FormNumber
For XML PATH ('')) [Values]
From cache.ArtifactAttribute ST2
问题是结果不正确。尽管 FormNumber 1 在表中只有三个条目,但 Values 列(动态构建的分隔字符串)显示不正确的结果。显然我们没有正确实现 sql 代码。
我们做错了什么?