【发布时间】:2015-06-23 07:00:22
【问题描述】:
我从这里的另一个线程 (T-SQL: Opposite to string concatenation - how to split string into multiple records) 复制了这段代码,它非常适合我需要它做的事情,但是如果被问到,我无法准确解释它是如何完成它的......有人能解释一下吗请问Recursive 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
【问题讨论】:
-
了解和调试 CTE 的一个方便技巧是查看中间结果。尝试将末尾的
SELECT语句更改为SELECT * FROM Pieces。
标签: sql sql-server-2008 tsql sql-server-2005