mysql存储过程(循环插入),获取自增主键作为外键插入其他表

#定义存储过程
delimiter //
DROP PROCEDURE IF EXISTS  pro_addaccount;
##hosp_name医院名称,num_limit循环产生多少账号
CREATE PROCEDURE pro_addaccount(in hosp_name VARCHAR(50),in num_limit int)
BEGIN
DECLARE i int default 1;
DECLARE k int default 0;
DECLARE hosp_code VARCHAR(50) ;
DECLARE hosp_id int ;
DECLARE area_id int  ;
DECLARE account_id VARCHAR(50) ;
DECLARE result_account_id VARCHAR(50) ;
DECLARE role_id int ;
DECLARE Result int ;


  ##根据医院名称,查询医院code
set hosp_code = (select code from hosp where NAME=hosp_name); 
 ## 根据医院名称,查询医院id
set hosp_id = (select id from hosp where NAME=hosp_name);
 ##根据医院名称获取医院地市
set area_id = (select area_id from hosp where NAME=hosp_name);


WHILE i<=num_limit do
if (i <10) THEN  
  set account_id = CONCAT('00',i); 
   ELSEIF(i>=10) and (i<=99) THEN
  set account_id = CONCAT('0',i); 
  ELSE
  set account_id =''+i;
 end if ;
  
set result_account_id = CONCAT(hosp_code,account_id);


INSERT into sys_account(hosp_id,area_id,account,pwd,level,add_time,update_time,bind_state) values 
(hosp_id ,area_id ,result_account_id,'E10ADC3949BA59ABBE56E057F20F883E',1,now(),now(),0);
 
SET Result=LAST_INSERT_ID();
if(k<=5) THEN
 set role_id = 4;
ELSEIF(k>5)and(k<=50) THEN
set role_id = 2;
 Else 
set role_id=3;
end if; 


INSERT into sys_account_role(sys_role_id,sys_account_id) values 
(role_id,Result);
 


set k = k+1;
set i = i + 1;
 
END WHILE;
 
END
//
在将自增主键作为外键进行批量插入时,你需要注意一些事项。以下是一的步骤: 1. 创建主从表: 首先,创建包含自增主键的主和包含外键从表。确保主中的主键列具有自增属性。 2. 插入数据: 首先,插入中的数据,这将生成主键自增值。你可以使用以下语法将数据插入: ```sql INSERT INTO 主名 (列1, 列2, ...) VALUES (值1, 值2, ...) ``` 3. 获取插入自增主键值: 在插入数据之后,你需要获取插入生成的自增主键值。可以使用`SCOPE_IDENTITY()`函数或`OUTPUT`子句来获取最新插入自增主键值。 ```sql DECLARE @LastID INT SET @LastID = SCOPE_IDENTITY() ``` 或者使用`OUTPUT`子句: ```sql DECLARE @InsertedIDs TABLE (ID INT) INSERT INTO 主名 (列1, 列2, ...) OUTPUT INSERTED.主键列 INTO @InsertedIDs VALUES (值1, 值2, ...) ``` 4. 插入从表数据: 接下来,你可以使用获取到的自增主键值,将数据插入从表。 在插入从表数据时,将自增主键作为外键值进行引用。 ```sql INSERT INTO 从表名 (外键列, 列1, 列2, ...) VALUES (@LastID, 值1, 值2, ...) ``` 或者使用`OUTPUT`子句: ```sql INSERT INTO 从表名 (外键列, 列1, 列2, ...) OUTPUT INSERTED.主键列 SELECT @LastID, 列1, 列2, ... FROM @InsertedIDs ``` 通过以上步骤,你可以将自增主键作为外键进行批量插入。确保在插入从表数据时,引用了正确的自增主键值。根据你的具体情况,可能需要根据实际结构和业务需求进行相应的修改和调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值