解释SQL代码片段

时间:2015-04-16 17:33:19

标签: sql sql-server-2008 tsql sql-server-2005

我从这里的另一个帖子(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

1 个答案:

答案 0 :(得分:0)

以下是一些文章,为您提供一个良好的递归起点。基本上,Pieces中的第一个查询是一个锚,并且union之后的第二个查询创建递归(请注意它如何调用Pieces定义中的Pieces)

SQL Server CTE Basics - Simple Talk

Technet

Dave Pinal Article