简体   繁体   English

公用表表达式 - 递归调用

[英]Common table expressions- recursive call

I found this piece of code here 我在这里找到了这段代码

WITH ShowMessage(STATEMENT, LENGTH)
AS
(
SELECT STATEMENT = CAST('I Like ' AS VARCHAR(300)), LEN('I Like ')
UNION ALL
SELECT
CAST(STATEMENT + 'CodeProject! ' AS VARCHAR(300))
, LEN(STATEMENT) FROM ShowMessage
WHERE LENGTH < 300
)
SELECT STATEMENT FROM ShowMessage

Output: 输出:

在此输入图像描述

I can't get the meaning of the code correctly, especially the usage of length. 我无法正确理解代码的含义,尤其是长度的使用。

Have a look at the query results when you change it to include the LENGTH column. 当您将其更改为包含LENGTH列时,请查看查询结果。

WITH ShowMessage(STATEMENT, LENGTH)
AS
(
    SELECT  STATEMENT = CAST('I Like ' AS VARCHAR(300)), 
            LEN('I Like ')
    UNION ALL
    SELECT  CAST(STATEMENT + 'CodeProject! ' AS VARCHAR(300)), 
            LEN(STATEMENT) FROM ShowMessage
    WHERE   LENGTH < 300
)
SELECT  STATEMENT,
        LENGTH
FROM    ShowMessage

You will notice on each recursion the length of the string gets longer. 您会注意到每次递归时字符串的长度变长。

The recursice loops will end once the leng grows to longer than 300 一旦leng增长到300以上,递归循环将结束

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM