У мене виникла проблема відстеження послідовності виконання наступного коду:
Код працює нормально
Я просто намагаюся зрозуміти, як це зробити.
with MyCTE(x)
as
(
1) select x = convert(varchar(8000),'hello')//line 1
union all
3) select x + 'a' from MyCTE where len(x) < 100 //line 3
)
select x from MyCTE
order by x
MSDN:
Семантика рекурсивного виконання така:
Розділити вираз CTE на якірні та рекурсивні елементи.
Запустіть прив'язку, яка створює перший виклик або базовий результат
Запустіть рекурсивний член (и) з Ti як вхідний, а Ti + 1 - як вихід.
Повторіть крок 3, доки не буде повернуто порожній набір.
Повертає набір результатів. Це UNION ALL T0 до Tn.
Етапи:
1) виконується рядок 1 (x = hello)
2) виконується рядок 3 (helloa)
3) тепер він називає себе так: тут х знову повертається до привіт! (рядок 1)
-
відповідно до рядка 1 , коли виклик cte - x завжди має бути скинутий (або T0 обходиться в рекурсивному?)
-
Яка роль для (x) її частини MyCTE (x)? введення чи виведення?
Цитата:
Запустіть рекурсивний член (и) з Ti як вхідний, а Ti + 1 - як вихід.
Наскільки мені відомо, (x) є вихідним значенням, а не входом.