数据库新增向父表插入单条数据向子表插入多条数据

本文介绍了一个用于数据库操作的存储过程,该过程能够高效地将员工信息及对应的部门信息批量插入到数据库中,并确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

--增(向员工表中增加一条数据,得到一个ID,同时向部门和员工信息表中增加一条或多条数据)
--创建一个插入员工和员工和部门对应关系表的存储过程

create proc myInsertEmployeeAndMapping
(
    @depids varchar(200),
 @id int,
 @outData int out
)
as

begin
begin tran myTran--声明一个事务
insert into--向员工表中插入数据
TEmployee(
    FName,FAge,FBirthday,FJiGuan,FSexID,IsAbled,FNumber
      ,IsConfirmed      )
  values('test',50,'1988-05-15','辽宁-大连',1,1,'cw100',1 )
 
 select @id=@@IDENTITY --把插入数据的获得员工ID赋值给ID变量
 
delete from Mapping_Employee_Department where employeeID=@id --根据插入数据的员工ID删除掉员工和部门关系表中的数据
 
insert into Mapping_Employee_Department (employeeID,departmentID)  
--select @id,value from SplitToTable('1,2,3,4,5,6,7,8',',')
select @id,value from SplitToTable(@depids,',')
select @outData=@@ROWCOUNT--把获得的数据条数赋值存储过程要返回的参数
 if(@@ERROR<>0)
  rollback tran mytran--回滚事务
 else
  commit tran mytran--提交事务
end 







--在数据库中进行字符串分割成表的函数
create FUNCTION [dbo].[SplitToTable]
 (
     @SplitString nvarchar(max),
     @Separator nvarchar(10)=' '
 )
 RETURNS @SplitStringsTable TABLE
 (
 [id] int identity(1,1),
 [value] nvarchar(max)
 )
 AS
 BEGIN
     DECLARE @CurrentIndex int;
     DECLARE @NextIndex int;
     DECLARE @ReturnText nvarchar(max);
     SELECT @CurrentIndex=1;
     WHILE(@CurrentIndex<=len(@SplitString))
         BEGIN
             SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);
             IF(@NextIndex=0 OR @NextIndex IS NULL)
                 SELECT @NextIndex=len(@SplitString)+1;
                 SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);
                 INSERT INTO @SplitStringsTable([value]) VALUES(@ReturnText);
                 SELECT @CurrentIndex=@NextIndex+1;
             END
     RETURN;
 END

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值