Sql 是否可以创建一个包含两个insert语句的存储过程,其中第一个insert语句的id/primary_键将在第二个insert语句中使用?
我看到有一个非常相似的问题已经得到了回答,它讨论了同样的问题,但我似乎无法理解它。下面是存储过程中的代码副本。我需要让第二条insert语句将第一条语句生成的CompanyID插入到第二条语句中。我很感激能得到的任何帮助 谢谢Sql 是否可以创建一个包含两个insert语句的存储过程,其中第一个insert语句的id/primary_键将在第二个insert语句中使用?,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我看到有一个非常相似的问题已经得到了回答,它讨论了同样的问题,但我似乎无法理解它。下面是存储过程中的代码副本。我需要让第二条insert语句将第一条语句生成的CompanyID插入到第二条语句中。我很感激能得到的任何帮助 谢谢 @comp_name nvarchar (50), @City nvarchar (50), @State nvarchar (10), @Address ntext, @Zip_Code nvarchar (50), @Country nvarchar (50), @c
@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)
对。您只需要添加一个收集ID的临时语句,将其存储在变量中,然后在第二个语句中使用它。因此,您需要添加以下内容
SELECT IDENT_CURRENT('dbo.CompanyTable')
对。假设您正在使用SQL Server。。。只需使用函数检索最后插入的标识值。换句话说,将@CompanyID替换为SCOPE_IDENTITY()。假设这是针对SQL Server的-是,请使用: 从MSDN关于
范围_IDENTITY()
的文档中:
返回中插入到标识列中的最后一个标识值
同样的范围。作用域是一个模块:存储过程、触发器、,
函数或批处理。因此,如果
它们位于同一存储过程、函数或批处理中
--现在您已经从第一个insert语句中获得了ID,即@MyFirstID
代码变为:
@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())
在第一个id之后提取所创建记录的id。这在不同的数据库系统中是不同的 对于Microsoft SQL Server:
set @CompanyId = scope_identity()
千万不要为此使用ident_current,它不限于此范围,并将在比赛条件下返回worng值。谢谢!我从来没有得到过这么快的帮助!
@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())
set @CompanyId = scope_identity()