如何从存储过程中返回插入记录的IDENTITY?

时间:2010-04-07 19:27:18

标签: sql sql-server stored-procedures

我正在向我的数据库添加数据,但是想要检索自动生成的UnitID。

using (SqlConnection connect = new SqlConnection(connections)) 
{ 
SqlCommand command = new SqlCommand("ContactInfo_Add", connect); 
command.Parameters.Add(new SqlParameter("name", name)); 
command.Parameters.Add(new SqlParameter("address", address)); 
command.Parameters.Add(new SqlParameter("Product", name)); 
command.Parameters.Add(new SqlParameter("Quantity", address)); 
command.Parameters.Add(new SqlParameter("DueDate", city)); 
connect.Open(); 
command.ExecuteNonQuery(); 
} 

...

ALTER PROCEDURE [dbo].[Contact_Add] 
@name varchar(40), 
@address varchar(60), 
@Product varchar(40), 
@Quantity varchar(5), 
@DueDate datetime 
AS  
BEGIN 
 SET NOCOUNT ON; 

 INSERT INTO DBO.PERSON 
 (Name, Address) VALUES (@name, @address) 
 INSERT INTO DBO.PRODUCT_DATA 
 (PersonID, Product, Quantity, DueDate) VALUES (@Product, @Quantity, @DueDate) 
END 

4 个答案:

答案 0 :(得分:7)

将输出参数添加到您的过程中:

@new_id int output

并在insert语句之后,为其赋值:

set @new_id = scope_identity()

将其添加到您的调用代码中:

command.Parameters.Add("@new_id", SqlDbType.Int).Direction = ParameterDirection.Output;

并检索值:

int newId = Convert.ToInt32(command.Parameters["@new_id"].Value);

答案 1 :(得分:3)

使用MSSQL更安全:

SET @AN_INT_OUTPUT_PARAM = SCOPE_IDENTITY()

或者只是

RETURN SCOPE_IDENTITY() 

答案 2 :(得分:2)

在存储过程中添加到最后

SELECT SCOPE_IDENTITY();
在C#中

在使用之外定义一个整数,并使用

将其分配
int UnitID;

UnitID = command.ExecuteScalar();  

答案 3 :(得分:0)

如果您有SQL Server 2008,请在线搜索OUTPUT子句。这是最好的方法。