解释 SQL 代码片段
Explain SQL Code Snippit
我从这里的另一个线程 (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
这里有一些文章可以为您提供递归的良好起点。基本上 Pieces 中的第一个查询是一个锚点,联合创建递归后的第二个查询(注意它如何在 Pieces 的定义中调用 Pieces)
我从这里的另一个线程 (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
这里有一些文章可以为您提供递归的良好起点。基本上 Pieces 中的第一个查询是一个锚点,联合创建递归后的第二个查询(注意它如何在 Pieces 的定义中调用 Pieces)