为一对多关系插入存储过程 SQL

Insert Stored Procedure for One to many relationship SQL

Asp.net表格

Student Name
Student Address
English (marks)
Maths (marks)
Science (marks)

对于上面的表格,我创建了以下 table 结构

Create Table Student
(
  sId int primary key identity(100,1),
  sName varchar(50),
  sAddress varchar(100)
)   

Create Table Subjects
(
  subId int primary key,
  subName varchar(100)
)

Create Table Marks
(
  mid int primary key identity(1,1),
  sId int foreign key references Student(sId) ,
  subId int foreign key references Subjects(subId),
   MarkPercent int
)      

Create Procedure uspAddStudentDetails
(
  @sName varchar(50),
  @sAddress varchar(100),
  @English int,
  @Maths int,
  @Science int
)
AS
Begin
  Insert into Students (sName, sAddress) values (@sName, @sAddress)
End

我想创建一个存储过程以将一次插入到 Student table 中,然后将多个详细信息插入到 Marks table 中,如下所述。我在上面的SP中进行了某种程度的尝试。

Subjects

1000  English
2000  Maths
3000  Science

Student

100  #10,Madison Rd.

Marks

1  100  1000 90
2  100  2000 76
3  100  3000 80

我认为以下程序符合您的要求:

首先插入这个值

insert into subjects values(1000,'English') 

insert into subjects values(2000,'Maths')

insert into subjects values(3000,'Science')

使用这个程序:

Create Procedure uspAddStudentDetails
(
  @sName varchar(50),
  @sAddress varchar(100),
  @English int,
  @Maths int,
  @Science int
)
AS
Begin

declare @sid int
declare @sqlinsert varchar(max)


  Insert into Student (sName, sAddress) values (@sName, @sAddress)


  select @sid=sid from Student where sName=@sName



 if @English is not null
 begin 
   select @sqlinsert=' insert into Marks(sId,subId,MarkPercent)values ('+convert(varchar(20),@sid)+',1000,'+convert(varchar(20),@English)+')'
   exec (@sqlinsert)
 end

 if @Maths is not null
 begin 

   select @sqlinsert=' insert into Marks(sId,subId,MarkPercent)values ('+convert(varchar(20),@sid)+',2000,'+convert(varchar(20),@maths)+')'
    exec (@sqlinsert)
 end

 if @Science is not null
 begin

   select @sqlinsert=' insert into Marks(sId,subId,MarkPercent)values ('+convert(varchar(20),@sid)+',3000,'+convert(varchar(20),@Science)+')'
    exec (@sqlinsert)
 end 


End

并执行程序:

exec uspAddStudentDetails 'kavin','no:10,Chennai',169,183,150

Student中的输出table:

sId sName   sAddress
100 kavin   no:10,Chennai

Marks Table:

mid sId subId   MarkPercent
1   100 1000    169
2   100 2000    183
3   100 3000    150