簡體   English   中英

使用存儲過程插入多個記錄

[英]Insert multiple records using stored procedure

我有兩張桌子

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

對於您的情況,您可以嘗試上面的代碼(我使用的是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>'

據我了解:如果帶有@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

您只需要一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM