是否可以使用两个insert语句创建存储过程,其中第一个insert语句中的id/primary_key将在第二个中使用?

Joh*_*ohn 4 sql sql-server stored-procedures

我看到有一个非常类似的问题已经回答了讨论同样的问题,但我似乎无法理解它.下面是我的代码在存储过程中的副本.我需要以某种方式,让第二个insert语句将第一个生成的CompanyID插入到第二个Statement中.我感谢任何帮助.

谢谢!!

@comp_name nvarchar (50),
@City nvarchar (50),
@State nvarchar (10),
@Address ntext,
@Zip_Code nvarchar (50),
@Country nvarchar (50),
@cust_name nvarchar (50),
@CompanyID int
AS
INSERT INTO Company_Listing
(comp_name, City, State, Address, Zip_Code, Country)
VALUES (@comp_name, @City, @State, @Address, @Zip_Code, @Country)

INSERT INTO Customer_Listing
(cust_name, City, State, Address, Zip_Code, Country, CompanyID)
VALUES (@comp_name,@City,@State,@Address,@Zip_Code,@Country,@CompanyID)
Run Code Online (Sandbox Code Playgroud)

Abe*_*ler 9

假设这是针对SQL Server的 - 是的,请使用SCOPE_IDENTITY:

@comp_name nvarchar (50),
@City nvarchar (50),
@State nvarchar (10),
@Address ntext,
@Zip_Code nvarchar (50),
@Country nvarchar (50),
@cust_name nvarchar (50),
@CompanyID int
AS
INSERT INTO Company_Listing
(comp_name, City, State, Address, Zip_Code, Country)
VALUES (@comp_name, @City, @State, @Address, @Zip_Code, @Country)

INSERT INTO Customer_Listing
(cust_name, City, State, Address, Zip_Code, Country, CompanyId)
VALUES (@comp_name,@City,@State,@Address,@Zip_Code,@Country,SCOPE_IDENTITY())
Run Code Online (Sandbox Code Playgroud)

从MSDN的文档SCOPE_IDENTITY():

返回插入同一范围内的标识列的最后一个标识值.范围是一个模块:存储过程,触发器,函数或批处理.因此,如果两个语句在同一存储过程,函数或批处理中,则它们在同一范围内.