我有一个 SQL Server 数据库,其中有一个带有分隔符 ( \
) 分隔字符串的单元格。这个字符串的一个例子是:
category_path
=============
RootCategory\Middle Category\Child Category\Child of child category
RootCategory\Middle Category\Other Child Category\
像这样的分类路径有很多。我想将它们全部解析到另一个表中:
category_name parent_path
====================================
RootCategory null
Middle Category RootCategory
Child Category RootCategory\Middle Category
Child of child category RootCategory\Middle Category\Child Category
Other Child Category RootCategory\Middle Category
我在这里省略了重复项,但结果可能包含重复项(稍后我需要将光标移到该表的行上,并且我可以在那里调用 distinct)。
网络上有很多简单拆分字符串的示例。(例如这里)我正在考虑编写一个查询,在其中拆分字符串,将光标放在结果上并在每个步骤中累积 parent_path ,但这似乎不是最理想的。
有没有解决方案,我不必为一个简单的字符串声明这么多游标?
使用递归 CTE 拆分字符串通常是一个糟糕的选择,但在这种情况下,我至少会考虑使用它的解决方案。
如果您使用更快的字符串拆分技术,则必须保留项目的顺序并
parent_category
使用for xml
. 这可能仍然比使用递归 CTE 更快,但无论如何这里都是递归的东西。SQL小提琴
MS SQL Server 2008 架构设置:
查询 1:
结果: