怎么写存储过程,向数据库中批量插入数据?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么写存储过程,向数据库中批量插入数据?相关的知识,希望对你有一定的参考价值。
例:数据库名为test,内有字段A,B,C,D,批量插入100条数据,字段A内容递增,从a1、a2、a3....a100,字段B内容递增,b1,b2,b3....b100,字段C、D内容不变。请问怎么写存储过程,将这100条数据插入数据?
test是数据库中的表,A,B字段可以对应递增,C、D内容不为空,随便找个数据填充就行,我想知道这个存储过程的语法怎么写,请帮我解惑。
用循环语句生成字段值insert
SQL 如下:
create procedure InsertTest
as
begin
declare @i int
declare @s varchar(20)
set @i=1
while @i<=100
begin
select @s=cast(@i AS varchar(20))
insert into test (A,B,C,D) VALUES ('a'+@s,'b'+@s,'ccccc','ddddd')
SET @i=@i+1
end
end
参考技术A这个简单循环。
GO
CREATE PROC insertdata
as
DECLARE @i INT
SET @i=1
WHILE (@i<=100)
BEGIN
INSERT INTO #test VALUES(@i,'aaa'+CAST(@i AS varchar),'cc','dd')
SET @i=@i+1
END
go
SELECT * FROM #test追问
请问,报了这个错误是什么原因啊?
是有语法错误吧,你是什么版本的SQL。我在SQL2008上执行没问题的。
参考技术B 你的描述不清楚啊,test是不是数据表?A,B字段是不是对应递增?C,D不变意思是都是空值,还是对某些现有值的选择?追问test是数据库中的表,A,B字段可以对应递增,C、D内容不为空,随便找个数据填充就行,我想知道这个存储过程的语法怎么写,请帮我解惑。
追答用循环语句生成字段值insert就OK了create procedure InsertTest
as
begin
declare @i int
declare @s varchar(20)
set @i=1
while @i<=100
begin
select @s=cast(@i AS varchar(20))
insert into test (A,B,C,D) VALUES ('a'+@s,'b'+@s,'ccccc','ddddd')
SET @i=@i+1
end
end追问
执行不通啊,请问这是什么原因呢?
你这是mysql啊,不是sql server,语法上不太一样,你试试
create procedure InsertTest()begin
declare i int;
declare s varchar(20);
set i=1;
while i<=100 do
begin
select s=cast(i AS varchar(20)) ;
insert into test (A,B,C,D) VALUES ('a'+s,'b'+s,'ccccc','ddddd');
SET i=i+1;
end while;
end;本回答被提问者采纳
mysql存储过程批量向表插入数据
业务需要,往某个表中批量插入数据,使用存储过程插入
首先,要建立一张mysql表,表明为phone_number, 三个字段,id 自增,number 就是要插入的表格,is_used 表示十分已经使用,默认值为0,未使用
CREATE TABLE `phone_number` ( `id` int(8) NOT NULL AUTO_INCREMENT, `number` varchar(12) NOT NULL, `is_used` tinyint(1) DEFAULT \'0\' COMMENT \'是否已经使用 1 已经使用,0 未使用\', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8;
在新建存储过程,存储过程名称为batch_insert,传入2个参数,第一个表示开始的号码,把号码当成一个整数。第二个参数是循环插入多少条记录,每插入一次后把插入的号码增加1,再插入。
DELIMITER $$ USE `db_xxxx`$$ DROP PROCEDURE IF EXISTS `batch_insert`$$ CREATE DEFINER=`root`@`%` PROCEDURE `batch_insert`(IN `start_number` BIGINT,IN `counts` BIGINT) BEGIN DECLARE p_number BIGINT DEFAULT start_number; DECLARE stop_number BIGINT DEFAULT start_number; SET stop_number=start_number + counts; WHILE p_number < stop_number DO INSERT INTO phone_number(number) VALUES(p_number); SET p_number=p_number+1; END WHILE ; COMMIT; END$$ DELIMITER ;
如下调用带2个参数,表示13535561906开始插入,插入40条记录后停止插入
CALL batch_insert(13535561906,40);
执行结果
以上是关于怎么写存储过程,向数据库中批量插入数据?的主要内容,如果未能解决你的问题,请参考以下文章