获取SQL Server数据库中最近添加的记录的主键值

时间:2013-12-19 02:49:24

标签: c# sql sql-server tsql

对于我正在处理的Web应用程序,只要用户向数据库添加新记录,系统就会验证记录是否已成功添加:

if (txnHnd.AddNewTxnDetails(txnDetails) == true && txnHnd.AddNewTxnName(txnName) == true)
{
   string message = "Record has been saved.";
   lblErrorMsg.Text = message;
   Response.Redirect("FXTxnList.aspx");
}
else
{
   string message = "Saving record failed.";
   lblErrorMsg.Text = message;
}

现在,如果记录已成功添加,系统只会在新添加的记录中插入一种Reference Number。我的表有一个名为TxnID的主键int。这是一个自动增量数BTW。问题是,如何从数据库中提取新添加的记录的TxnID?我需要将代码放在if语句的if-else部分中,其中表示已保存记录。

2 个答案:

答案 0 :(得分:1)

更新/创建SP

CREATE PROC SP_Insert
(
     @name VARCHAR(50),
     @id INT OUTPUT
)

AS 
    INSERT INTO Table (ColumnName) VALUES (@name)
    SET @id=SCOPE_IDENTITY()

然后从ado.net调用此sp,如下所示

    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "SP_Insert";
    SqlParameter param = new SqlParameter();
    param.Name = "@id";
    param.Direction = ParameterDirection.Output;
    cmd.Parameters.Add(param);
    cmd.ExecuteNonQuery();
    int id = (int)param.Value;

答案 1 :(得分:0)

如果您可以修改用于插入新记录的存储过程/命令,则应使用SCOPE_IDENTITY()返回上次生成的标识值:

SELECT CAST(SCOPE_IDENTITY() AS INT)

如果您正在使用存储过程并且无法对其进行修改,则需要使用@@IDENTITY,因为SCOPE_IDENTITY()仅适用于同一范围(在本例中为存储过程)。但要小心,因为@@IDENTITY将返回最后一个身份,而不受可能受影响的范围限制,例如通过触发器。

SELECT CAST(@@IDENTITY AS INT)

更多关于MSDN