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 条件。
当我们使用字符时,我们需要使用 CAST
或 CONVERT
,而当我们使用整数时,它不需要任何转换函数。
我是 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 条件。
当我们使用字符时,我们需要使用 CAST
或 CONVERT
,而当我们使用整数时,它不需要任何转换函数。