怎么写存储过程,向数据库中批量插入数据?

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

这个简单循环。

CREATE TABLE #test (a INT,b VARCHAR(10),c VARCHAR(10),d VARCHAR(10))
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);

执行结果

 

以上是关于怎么写存储过程,向数据库中批量插入数据?的主要内容,如果未能解决你的问题,请参考以下文章

mysql存储过程批量向表插入数据

批量向MySQL导入1000万条数据的优化

mysql存储过程怎样批量插入数据

mysql写存储过程对单表插入测试数据,出问题

如何使用MySQL实现批量插入数据

sql批量插入数据之存储过程