简体   繁体   English

如何在具有两个表参数的存储过程中编写多个插入语句

[英]how to write more than one insert statements in stored procedure with two table parameters

I have two tables我有两张桌子

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

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

How to write two tables insert statements in single stored procedure.如何在单个存储过程中编写两个表插入语句。 The second table "EmpContact" needs the resulted Identity ID from insertion in the first table "Employee"第二个表“EmpContact”需要插入第一个表“Employee”的结果标识 ID

what you need is SCOPE_IDENTITY() function, it returns last ID within a scope您需要的是 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)

ummm... the answer is really simple, just write a procedure with error handling etc. emmm... 答案很简单,只要写一个带有错误处理等的程序就可以了。

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

Assuming your unknown fields are coming in as parameters:假设您的未知字段作为参数传入:

Inside your stored proc...在您的存储过程中...

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)
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 and @@IDENTITY return the last identity values that are generated in any table in the current session. SCOPE_IDENTITY 和@@IDENTITY 返回在当前会话的任何表中生成的最后一个标识值。 However, SCOPE_IDENTITY returns values inserted only within the current scope;但是,SCOPE_IDENTITY 返回仅在当前范围内插入的值; @@IDENTITY is not limited to a specific scope. @@IDENTITY 不限于特定范围。

SCOPE_IDENTITY (Transact-SQL) - MSDN SCOPE_IDENTITY (Transact-SQL) - MSDN

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM