为一对多关系插入存储过程 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
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