我是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行输出,并且没有循环..这是怎么可能的
答案 0 :(得分:1)
递归CTE包含两个定义:Anchor成员和Recursive成员。 首先,它执行一次锚定部分,然后递归一次。
SELECT CONVERT(VARCHAR(10), CTE_Stars.Stars+'*') Stars
FROM CTE_Stars
当您调用FROM CTE_Stars
时,在递归CTE中,它只执行CTE_Stars的递归成员,直到它满足where条件。
当我们使用字符时,我们需要使用CAST
或CONVERT
,因为当我们使用整数时,它不需要任何转换函数。