Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否可以创建一个包含两个insert语句的存储过程,其中第一个insert语句的id/primary_键将在第二个insert语句中使用?_Sql_Sql Server_Stored Procedures - Fatal编程技术网

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

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

我看到有一个非常相似的问题已经得到了回答,它讨论了同样的问题,但我似乎无法理解它。下面是存储过程中的代码副本。我需要让第二条insert语句将第一条语句生成的CompanyID插入到第二条语句中。我很感激能得到的任何帮助

谢谢

@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()