繁体   English   中英

使用 CTE 插入表

[英]Insert into a table using CTE

我发现了一段很好的代码,它创建了一个包含 100.000 条测试记录的表。 我完全迷失了语法。 我知道它是一个表构造函数(来自值(0).....),我知道它是一个交叉连接(部分:CreateTable as tt,CreateTable as st 等......),但我如何理解公式创建 100.000 条记录?

truncate table t2;

with CreateTable as
(
    select d 
    from (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as d(d)
)
insert into t2(col1)
    select 10000 * tt.d + 1000 * st.d + 100 * h.d + 10 * t.d + s.d + 1
    from CreateTable as tt, CreateTable as st, CreateTable as h, CreateTable as t, CreateTable as s;

没有公式可以创建 100 000 行。

只是读到这里我觉得:你从一个 10 行的表开始,然后代码用别名(tt、st、h、t 和 s)将表与自身连接起来。

所以在开始时有 10 行,在 4 次连接之后,以 10^5 行(100 000 行)结束。

正如 Stu 所说,这是一个笛卡尔积。

假设您使用的是 SQL 服务器:

不使用 cte 的另一种可能的解决方案,认为这可能对其他人有所帮助

create table dbo.test_table(id int)

declare @id int = 1

WHILE @id < 100001 
BEGIN  
        
        INSERT INTO test_table(id)
        SELECT  @id
        SET @id = @id+1
END

暂无
暂无

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

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