如果SQL Server 2005中的任何列,如何获取最后一个ID?

时间:2012-05-12 10:25:59

标签: c# sql-server-2005

  

可能重复:
  How to get last inserted id?

我正在尝试获取最后一个id(identity列的最后一个值),以便在每次将数据插入表时将其显示在控件上增加1。

如何使用C#在SQL Server 2005中的存储过程中获取最后一个ID?

4 个答案:

答案 0 :(得分:2)

标识列在数据库中递增,而不是在C#侧递增。您可以像这样查询最后一个值:

SELECT MAX(id) FROM mytable

答案 1 :(得分:2)

在插入发生时(使用SCOPE_IDENTITY())获取最新ID,或者如果您稍后需要检查IDENTITY列的当前值,请使用SELECT IDENT_CURRENT('table_name')获取那个价值。

所以最简单的方法就是在插入值时获取ID - 如下所示:

string sql = "INSERT INTO dbo.YourTable(Col1, ..., ColN) VALUES(@Val1, ..., @ValN); SELECT SCOPE_IDENTITY()";

using (SqlConnection conn = new SqlConnection(connString))
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
    conn.Open();
    _ID = (Int32)cmd.ExecuteScalar();
    conn.Close();
}

或者,如果您在插入ID时无法获取ID,您可以随后检查给定表上IDENTITY列的当前上次使用值的内容,使用以下内容:

string sql = string.Format("SELECT IDENT_CURRENT('{0}');", yourTableName);

using (SqlConnection conn = new SqlConnection(connString))
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
    conn.Open();
    _ID = (Int32)cmd.ExecuteScalar();
    conn.Close();
}

答案 2 :(得分:1)

您可以使用此

SELECT @@IDENTITY AS 'Identity';

或者

SELECT MAX(SomeID) FROM SomeTable;

修改

最佳使用方式

SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]

在C#中你可以打电话

Int32 _ID = 0;
//you could use second variant sql= "SELECT MAX(SomeID) FROM SomeTable";
string sql =
    "SELECT @@IDENTITY AS 'Identity'";
using (SqlConnection conn = new SqlConnection(connString))
{
    SqlCommand cmd = new SqlCommand(sql, conn);
    try
    {
        conn.Open();
        _ID = (Int32)cmd.ExecuteScalar();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

修改

感觉不同的好链接 Using @@IDENTITY and SCOPE_IDENTITY with triggers

答案 3 :(得分:0)

SELECT TOP 1 Id FROM table_name ORDER BY 1 DESC

或在LINQ中:

context.table.Select(x->x.Id).OrderByDescending(x->x.Id).FirstOrDefault();