繁体   English   中英

在存储过程中使用Select Scope_Identity()

[英]Using Select Scope_Identity() with a store procedure

我正在编写一些代码,这些代码将使用存储过程(sp_AddNewUser)将用户数据插入数据库。 存储过程只是将数据插入数据库中。 我想知道是否可以在不编辑存储过程的情况下将SCOPE_IDENTITY()函数用于存储过程。

  SqlCommand cmd = new SqlCommand("sp_AddNewUser", conn);
  cmd.CommandType = CommandType.StoredProcedure;
  cmd.Parameters.Add("@firstname", SqlDbType.VarChar).Value =   row.Cells[_dicDef["firstname"]].Value;
  cmd.Parameters.Add("@lastname", SqlDbType.VarChar).Value = row.Cells[_dicDef["lastname"]].Value;
  cmd.ExecuteNonQuery();
  //NOT SURE WHAT TO DO AFTER THIS COMMENT ----
  string sql = "SELECT CAST(scope_identity() AS int)";
  cmd = new SqlCommand(sql, conn);
  newID = (Int 32_cmd.ExecuteScalar(); //<---- will this return the latest id?

}

不,您不能以这种方式使用它。 正如MSDN所述:

返回插入同一作用域中的Identity列的最后一个Identity值。 范围是一个模块:存储过程,触发器,函数或批处理。 因此,如果两个语句位于相同的存储过程,函数或批处理中,则它们属于同一范围。

它对您不起作用,因为您的两个语句不在同一范围内,并且SCOPE_IDENTITY()不返回任何内容。

在这种情况下,使用@@IDENTITY将返回您需要的值:

@@ IDENTITY将返回当前会话中任何作用域中插入的最后一个身份列值

不过,您必须小心以确保它是正确的身份(在上面的示例中应该可以)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM