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

标签 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 

最佳答案

为您的过程添加一个输出参数:

@new_id int output

在插入语句之后,为其赋值:

set @new_id = scope_identity()

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

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

并检索值:

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

关于sql - 如何从存储过程返回插入记录的 IDENTITY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2595278/

相关文章:

sql - 选择中的组编号 (Oracle)

mysql - 向大型数据库表正确添加索引

sql - 改进 sql 中的文本搜索

sql - tsql 字符串与 select 和 order by 的连接不能与 order by 子句中的函数一起使用?

mysql - 如何比较 SQL Server 的表和 MySQL 的表

PHP bindParam 似乎不适用于 PARAM_INT 输出参数

stored-procedures - 来自 DocumentDB 存储过程的触发触发器

java - <EOF>创建 Derby 表时出现异常

sql - 从 Unique 检查的时间戳中提取月份和年份?

MySQL,存储过程(存储函数)和参数作为查询中的行