使用存储过程

时间:2015-04-30 08:35:03

标签: sql asp.net sql-server sql-server-2008

我有两张桌子

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

3 个答案:

答案 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