我看到有一个非常类似的问题已经回答了讨论同样的问题,但我似乎无法理解它。下面是我的代码在存储过程中的副本。我需要以某种方式,让第二个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)
答案 0 :(得分: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())
来自MSDN关于SCOPE_IDENTITY()
的文档:
返回插入标识列的最后一个标识值 相同的范围。范围是一个模块:存储过程,触发器, 功能或批处理。因此,如果两个语句属于同一范围 它们处于相同的存储过程,功能或批处理中。
答案 1 :(得分:4)
是。假设您正在使用SQL Server ...只需使用SCOPE_IDENTITY()函数来检索最后插入的标识值。换句话说,将@CompanyID替换为SCOPE_IDENTITY()。
答案 2 :(得分:0)
SET @MyFirstID = (SELECT SCOPE_IDENTITY())
- 现在你有第一个插入语句的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())
答案 3 :(得分:0)
在第一个ID之后选取已创建记录的ID。这在不同的数据库系统中以不同的方式完成。
对于Microsoft SQL Server:
set @CompanyId = scope_identity()
答案 4 :(得分:-1)
是。您只需要添加一个临时语句来收集ID,将其存储在变量中,然后在第二个语句中使用它。所以你需要添加像
这样的东西SELECT IDENT_CURRENT('dbo.CompanyTable')