我正在尝试在MySQL数据库中创建一堆记录。这是一次创建,所以我不是要创建存储过程。这是我的代码:
BEGIN
SET i = 2376921001;
WHILE (i <= 237692200) DO
INSERT INTO `mytable` (code, active, total) values (i, 1, 1);
SET i = i+1;
END WHILE;
END
这是错误:
[查询1中的错误]您的SQL语法出错;检查与您的MySQL服务器版本对应的手册,以便在'SET i = 2376921001附近使用正确的语法
WHILE(i <= 237692200)DO
INSERT INTO coupon
(第2行的couponCod'
执行停止了!
我尝试了一个具有相同结果的声明。代码如下:
BEGIN
DECLARE i INT unsigned DEFAULT 2376921001;
WHILE (i <= 237692200) DO
INSERT INTO `mytable` (code, active, total) values (i, 1, 1);
SET i = i+1;
END WHILE;
END
我尝试的另一件事是@i而不是我。同样的错误。 谁能看到我做错了什么?
答案 0 :(得分:22)
drop procedure if exists doWhile;
DELIMITER //
CREATE PROCEDURE doWhile()
BEGIN
DECLARE i INT DEFAULT 2376921001;
WHILE (i <= 237692200) DO
INSERT INTO `mytable` (code, active, total) values (i, 1, 1);
SET i = i+1;
END WHILE;
END;
//
CALL doWhile();
答案 1 :(得分:19)
你不能那样使用WHILE
;见:mysql DECLARE WHILE outside stored procedure how?
您必须将代码放在存储过程中。例如:
CREATE PROCEDURE myproc()
BEGIN
DECLARE i int DEFAULT 237692001;
WHILE i <= 237692004 DO
INSERT INTO mytable (code, active, total) VALUES (i, 1, 1);
SET i = i + 1;
END WHILE;
END
小提琴:http://sqlfiddle.com/#!2/a4f92/1
或者,使用您喜欢的任何编程语言生成INSERT
语句列表;对于一次性创作,应该没问题。举个例子,这是一个Bash one-liner:
for i in {2376921001..2376921099}; do echo "INSERT INTO mytable (code, active, total) VALUES ($i, 1, 1);"; done
顺便说一句,你的数字输了一个错字; 2376921001有10位数,237692200只有9。