CTE 如何为下面提到的查询提供输出

how is CTE giving output for the the below mentioned query

我是 sql 编程的新手。我有 2 个问题基于下面提到的查询

WITH CTE_Stars AS
(
    SELECT CONVERT(VARCHAR(10), '*') Stars

    UNION ALL

    SELECT CONVERT(VARCHAR(10), CTE_Stars.Stars+'*') Stars 
    FROM CTE_Stars  
    WHERE LEN(Stars) < 6
)
SELECT * 
FROM CTE_Stars

有人可以解释上面的查询是如何工作的吗?其次,如果没有转换函数,这个查询就不能工作,为什么..?为什么我们需要将'*'转换为字符?默认情况下 * 数据类型仅为字符。

这个查询给出了 5 行的输出,并且没有循环..这怎么可能

Recursive CTE 包含两个定义 Anchor 成员和 Recursive 成员。 首先它执行一次锚定部分和一次递归部分。

SELECT CONVERT(VARCHAR(10), CTE_Stars.Stars+'*') Stars 
FROM CTE_Stars  

当您调用 FROM CTE_Stars 时,在递归 CTE 中,它只执行 CTE_Stars 的递归成员,直到它满足 where 条件。 当我们使用字符时,我们需要使用 CASTCONVERT,而当我们使用整数时,它不需要任何转换函数。