zoukankan      html  css  js  c++  java
  • CTE测试

    上周一直在看CTE因为里面都是一个表,或者说看的基本上都是可以拿来直接用SQL自己可以描述的,但是看到的代码的程序自己还是没有看太懂,只是能猜,有不确定性。

    今天上午闲来测试了一下下:

    use TESTDB
    go

    /*
    ----------------------------------
    Server: Sql Server 2008
    Create date: 2011/11/29
    Author: CC
    Descrioption: CTE测试
    ----------------------------------
    */
    create table test_cte
    (
    aa int,
    bb int,
    cc int,
    dd int
    )

    insert into test_cte
    select 1,1,1,1
    union all
    select 1,1,1,2
    union all
    select 1,1,1,3
    union all
    select 1,1,1,4


    create table test_cte1
    (
    aa int,
    bb int,
    ee int,
    ff int
    )

    insert into test_cte1
    select 1,2,3,2
    union all
    select 2,3,4,3
    union all
    select 3,4,5,4
    union all
    select 1,2,3,5


    select * from test_cte;
    select * from test_cte1;
    go

    自己开始的时候是这样写的:
    with cte_test as
    (
    SELECT AA as bb,BB as bb, dd as cc FROM test_cte
    union all
    select test_cte1.aa as aa,test_cte1.bb as bb,test_cte1.ff as cc from test_cte1 join cte_test on cte_test.cc=test_cte1.ff
    )

    select * from cte_test ;
    go

    很明显这个是死循环,但是自己不知道,只是会有出错信息:消息 530,级别 16,状态 1,第 1 行
    语句被终止。完成执行语句前已用完最大递归 100。
    还以为是递归没有用过,百度看一下递归的最大数据是可以修改的,但是改了之后还是这样。
    这就是说我想的有问题
    思考了一下,改为了下面的语句:
    with cte_test as
    (
    SELECT AA as bb,BB as bb, dd as cc FROM test_cte
    union all

    select 5+test_cte1.aa as aa,5+test_cte1.bb as bb,5+test_cte1.ff as cc
    from test_cte1 join cte_test on cte_test.cc=test_cte1.ff
    )

    select * from cte_test;
    go

    结果是:
    bb          bb          cc
    ----------- ----------- -----------
    1           1           1
    1           1           2
    1           1           3
    1           1           4
    8           9           9
    7           8           8
    6           7           7

    (7 行受影响)

    这样就一目了然,就是第一SELECT其实就是CTE_TEST的结果,然后第二个查询再拿来使用,然后再来把最后的结果存入到CTE_TEST中。


    --使用option(maxrecursion 1000可更新最大递归数)
    --
    如:
    select * from cte_test option(MAXRECURSION 1000);
    go





  • 相关阅读:
    spring boot cli 知识点
    OSX Homebrew 安装 Spring Boot CLI
    前端重定向,index.html文件被浏览器缓存,导致整个应用都是旧的
    单页面应用,接入cdn
    Spring Cloud 之 Hystrix 知识点:隔离、熔断、降级
    Spring Cloud 之 Ribbon 知识点:服务器负载均衡
    Spring Cloud 之 Feign 知识点:封装了 REST 调用
    spring cloud 学习资料
    Gradle 知识点
    Gradle 学习资料
  • 原文地址:https://www.cnblogs.com/zerocc/p/2267328.html
Copyright © 2011-2022 走看看