【问题标题】:Explain SQL Code Snippit解释 SQL 代码片段
【发布时间】: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


【解决方案1】:

这里有一些文章可以为您提供一个很好的递归起点。 Pieces 中的第一个查询本质上是一个锚点,联合之后的第二个查询创建了递归(注意它是如何在 Pieces 的定义中调用 Pieces 的)

SQL Server CTE Basics - Simple Talk

Technet

Dave Pinal Article

【讨论】:

    猜你喜欢
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 2013-04-06
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多