SQL Server中如何在表内创建1至450的编号行?
解决批量插入1到450序列值的问题
嘿,我来帮你搞定这个插入序列值的问题!你遇到的报错是因为你写的代码更像Java/C#这类编程语言的循环语法,数据库本身不认识这种直接写在SQL里的For循环结构,而且你也没定义对应的存储过程,所以才会提示“Could not find procedure”。
下面我给你几种主流数据库的解决方案,你可以根据自己使用的数据库来选:
MySQL 解决方案
方法1:创建并调用存储过程
如果你想用循环的方式,可以先创建一个存储过程,再调用它:
DELIMITER // CREATE PROCEDURE InsertSequenceToTableName() BEGIN DECLARE current_num INT DEFAULT 1; WHILE current_num <= 450 DO INSERT INTO tableName (columnName) VALUES (current_num); SET current_num = current_num + 1; END WHILE; END // DELIMITER ; -- 调用存储过程执行插入 CALL InsertSequenceToTableName();
方法2:用递归CTE(无需存储过程)
不想创建存储过程的话,递归CTE是更简洁的方式:
INSERT INTO tableName (columnName) WITH RECURSIVE sequence AS ( SELECT 1 AS num UNION ALL SELECT num + 1 FROM sequence WHERE num < 450 ) SELECT num FROM sequence;
SQL Server 解决方案
方法1:直接用WHILE循环
不需要存储过程,直接在查询窗口执行这段代码就行:
DECLARE @current_num INT = 1; WHILE @current_num <= 450 BEGIN INSERT INTO tableName (columnName) VALUES (@current_num); SET @current_num = @current_num + 1; END;
方法2:递归CTE
WITH sequence AS ( SELECT 1 AS num UNION ALL SELECT num + 1 FROM sequence WHERE num < 450 ) INSERT INTO tableName (columnName) SELECT num FROM sequence OPTION (MAXRECURSION 0);
注:OPTION (MAXRECURSION 0)是关闭递归层数限制,默认SQL Server递归上限是100,这里需要调到0来支持450次递归。
PostgreSQL 解决方案
PostgreSQL有内置的序列生成函数,最简单:
INSERT INTO tableName (columnName) SELECT generate_series(1, 450);
选适合你数据库的方法执行,就能得到columnName列从1到450的450条记录啦!
内容的提问来源于stack exchange,提问作者ZombieDivision
相关产品推荐
相关产品推荐

