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

时间:2015-06-10 06:04:01

标签: sql-server stored-procedures

Asp.net表格

SELECT * FROM (SELECT P1.* FROM 
    (SELECT 
        a_profile_id AS profile_id, 
        a_profile_match_available_on as profile_match_available_on 
    FROM profile_match 
    UNION SELECT 
        b_profile_id  AS profile_id, 
        b_profile_match_available_on as profile_match_available_on 
    FROM profile_match) AS P1
) AS P2
GROUP BY P2.profile_id
HAVING profile_match_available_on > MIN(profile_match_available_on);

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

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

我想创建一个存储过程,将一次插入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表中,如下所述。我在上面的SP中尝试了一些程度。

Marks

1 个答案:

答案 0 :(得分:2)

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

首先插入此值

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表中的输出:

sId sName   sAddress
100 kavin   no:10,Chennai

Marks表:

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