[英]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.