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

时间:2015-01-09 05:17:36

标签: sql-server-2008

我是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

有人可以解释上面的查询是如何工作的,如果没有转换函数,第二个查询不起作用为什么..?为什么我们需要转换&#39; *&#39;性格?默认情况下,*数据类型仅为字符。

此查询提供5行输出,并且没有循环..这是怎么可能的

1 个答案:

答案 0 :(得分:1)

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

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

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