SQL 为主表的谋一条记录,在中间表中同时插入多条数据

本文介绍了一种通过存储过程实现在主表更新时,中间关联表能够批量插入多条新记录的方法。此方法适用于需要维护多表关联数据一致性的场景。

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

有时我们会像下面的情况一样,为主表的谋一条记录,在中间表(T_Stud_Course )中同时插入多条数据

 

T_Student

Stud_ID

Name

1

Tom

2

Jack

T_Course

Course_ID

Course

1

Chinese

2

English

T_Stud_Course

ID

Stud_ID

Course_ID

1

1

1

2

1

2

3

2

2

 

 

 

 

 

现在我们可以下面的存储过程来实现:

 

--为主表的谋一条记录,在中间表中同时插入多条数据

ALTER proc [dbo].[wholeInsert]

(

  @insert_val nvarchar(1000),   --新增的第一个字段的值(多个用‘,’分隔),A,B,

  @PK_id nvarchar(50),          --新增数据的第二个字段值,同时也是删除旧数据的条件(不支持多个)

  @col_1 nvarchar(20),          --第一个字段名

  @col_2 nvarchar(20),          --第二个字段名

  @Tab nvarchar(20),            --表名

)

as

begin

    declare @sql varchar(1000)

    declare @strVal nvarchar(100)

    set @sql='delete from '+@Tab+' where '+@col_2+'='+@PK_id

    exec(@sql)

    while(len(@insert_val)>0)

    begin

       set @strVal=substring(@insert_val,1,charindex(',',@insert_val,1)-1)

       set @insert_val=substring(@insert_val,charindex(',',@insert_val,1)+1,len(@insert_val)-charindex(',',@insert_val,1))

       set @sql='insert into '+@Tab+' ('+@col_1+','+@col_2+') values ('+@strVal+','+@PK_id+')'

    exec(@sql)

    end

end

 

执行:

Exec wholeInsert '1,2,','1','Course_ID','Stud_ID','T_Stud_Course'

--表示同时为Stud_ID=1的学生增加两门课程(Course_ID12)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值