2015-04-16 41 views
0

我從這裏的另一個線程(T-SQL: Opposite to string concatenation - how to split string into multiple records)複製了此代碼,它對我所需要的功能非常有用,但如果被問到,我無法解釋它是如何完成它的功能的。請解釋遞歸CTE正在一步一步做什麼?解釋SQL代碼Snippit

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

一便於理解和調試CTE的技巧是看中間結果。嘗試將最後的'SELECT'語句更改爲'SELECT * FROM Pieces'。 – HABO

回答