如何使用两个表参数在存储过程中编写多个insert语句

时间:2013-01-23 11:45:00

标签: sql stored-procedures asp-classic

我有两张桌子

Employee---->Id(identity),FN,LN,Address

EmpContact--->Id(identity),Empid(Above table identity value),ContactType,ContactNumber

如何在单个存储过程中编写两个表insert语句。第二个表“EmpContact”需要在第一个表“Employee”中插入生成的身份ID

5 个答案:

答案 0 :(得分:0)

你需要的是SCOPE_IDENTITY()函数,它返回范围内的最后一个ID

insert into Employee(FN,LN, Adress)
values(@var1, @var2, @var3)

declare @EmpID int 
set @EmpID = SCOPE_IDENTITY()

insert into EmpContact(Empid, ContactType, contactNumber)
values(@EmpID, @var4, @var5)

答案 1 :(得分:0)

嗯...答案很简单,只需编写一个带错误处理的程序等。

create procedure dbo.myProc
@param

insert into dbo.Employee(FN,LN,Address)
select @value1, @value2, @value3

insert into dbo.EmpContact(Empid,ContactType,ContactNumber)
select ID,@value4, @value5
from dbo.Employee

go

答案 2 :(得分:0)

假设您的未知字段作为参数进入:

在你的存储过程中......

DECLARE @EmployeeID BIGINT --Or whatever datatype you are using

INSERT INTO Employee
    (FN, LN, Address)
VALUES
    (@FN, @LN, @Address)

SET @EmployeeID = SCOPE_IDENTITY()  --This is probably the line you are looking for

INSERT INTO EmpContact
    (Empid, ContractType, ContractNumber)
VALUES
    (@EmployeeID, @ContractType, @ContractNumber)

答案 3 :(得分:0)

create proc yourproc
(
   -- parameter definitions here
)
as
begin
        insert into Employee
        (FN,LN,Address) 
        values 
        (@FN,@LN,@Address)

declare @EmployeeID int 
set @EmployeeID = SCOPE_IDENTITY()

        insert into EmpContact
        (Empid, ContactType, ContactNumber) 
        values 
        (@EmployeeID, @ContactType, @ContactNumber) 
end
  

SCOPE_IDENTITY和@@ IDENTITY返回最后的标识值   在当前会话的任何表中生成。但是,SCOPE_IDENTITY   返回仅在当前范围内插入的值; @@ IDENTITY是   不限于特定范围。

SCOPE_IDENTITY (Transact-SQL) - MSDN

答案 4 :(得分:0)

您可以使用原始插入内容,但可以使用SCOPE_IDENTITY()在第一个表中插入的标识ID,它返回为当前会话中的任何表和当前范围生成的最后一个标识值。 / p>