我从这里的另一个帖子(T-SQL: Opposite to string concatenation - how to split string into multiple records)复制了这个代码,它非常适合我需要它做的事情,但是如果被问到,我无法准确地解释它是如何完成的......有人可以解释一下递归CTE正在逐步做什么吗?
WITH Pieces(pn, start, stop) AS (
SELECT 1, 1, CHARINDEX(@sep, @s)
UNION ALL
SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
FROM Pieces
WHERE stop > 0
)
SELECT pn,
SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s
FROM Pieces
答案 0 :(得分:0)
以下是一些文章,为您提供一个良好的递归起点。基本上,Pieces中的第一个查询是一个锚,并且union之后的第二个查询创建递归(请注意它如何调用Pieces定义中的Pieces)