我有两张桌子
emplyoee (first table)
id primary key auto increment
emp_name varchar
student(second table)
id foriegnkey emplyoee.id
st_name varchar
我想为单个employeeid
插入多个学生记录。我的代码附在此处,但这仅用于一个学生记录更新。如何为此需求编写存储过程。
我是SQL服务器和存储过程的新手。
你能帮我吗?
create procedure empst_Sp
@emp_name varchar(50),
@st_name varchar(50)
as
begin
insert into emplyoee (emp_name) values (@emp_name)
insert into student(id,st_name) values(SCOPE_IDENTITY(),@st_name)
end
答案 0 :(得分:3)
对于您的情况,您可以尝试上面的代码(我正在使用XML参数类型)
CREATE PROCEDURE EmployeeIns
@EmployeeName NVARCHAR(50),
@Students XML
AS
/*
@Students : <Students>
<Student Name='Studen 1'/>
<Student Name='Studen 1'/>
</Students>
*/
BEGIN
DECLARE @StudenTable TABLE(Name NVARCHAR(50))
DECLARE @EmployeeId INT
INSERT INTO @StudenTable
SELECT Tbl.Col.value('@Name', 'NVARCHAR(50)')
FROM @Students.nodes('//Student') Tbl(Col)
INSERT INTO Emplyoee VALUES(@EmployeeName)
SET @EmployeeId = SCOPE_IDENTITY()
INSERT INTO Student
SELECT @EmployeeId, Name FROM @StudenTable
END
更新1: 您的表格设计应如下所示:
CREATE TABLE [dbo].[Emplyoee](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](150) NULL,
CONSTRAINT [PK_Emplyoee] PRIMARY KEY CLUSTERED
(
[Id] ASC
))
CREATE TABLE [dbo].[Student](
[EmployeeId] [int] NULL,
[Name] [nvarchar](150) NULL,
[Id] [int] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED
(
[Id] ASC
))
执行代码:
EXEC EmployeeIns @EmployeeName='trungtin1710', @Students = '<Students><Student Name="Studen 1"/><Student Name="Studen 1"/></Students>'
答案 1 :(得分:0)
据我所知: 如果已经存在带有@emp_name的emplyoee,则插入具有emplyoee ID的学生记录,如果没有任何带有@emp_name的emplyoee,则需要插入新的emplyoee和具有新emplyoee的ID的学生。是
CREATE PROCEDURE empst_Sp
@emp_name varchar(50),
@st_name varchar(50)
AS
BEGIN
DECLARE @EmplyoeeId int
SET @EmplyoeeId = NULL
select @EmplyoeeId = id
from emplyoee
where emp_name = @emp_name
IF @EmplyoeeId IS NULL
BEGIN
insert into emplyoee (emp_name) values (@emp_name)
SET @EmplyoeeId = SCOPE_IDENTITY()
END
insert into student(id, st_name) values(@EmplyoeeId, @st_name)
END
答案 2 :(得分:0)
您只需要一个local variable
,您可以在其中设置从Scope_Identity中检索到的值: -
CREATE PROCEDURE empst_Sp
@emp_name varchar(50),
@st_name varchar(50)
AS
BEGIN
DECLARE @id INT
INSERT INTO emplyoee (emp_name) VALUES (@emp_name)
set @id = SCOPE_IDENTITY()
INSERT INTO student(id,st_name) VALUES (@id,@st_name)
END