如何获取最后一个 ID(如果有列)在 SQL Server 2005

本文关键字:Server 2005 SQL ID 何获取 获取 最后一个 如果 | 更新日期: 2023-09-27 18:33:53

可能的重复项:
如何获取上次插入的 ID?

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

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

如何获取最后一个 ID(如果有列)在 SQL Server 2005

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

SELECT MAX(id) FROM mytable
要么

在插入发生时获取最新的 ID(使用 SCOPE_IDENTITY() ),要么稍后需要检查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();
}

你可以使用这个

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);
    }
}

编辑

感觉不同的好链接将@@IDENTITY和SCOPE_IDENTITY与触发器

一起使用
SELECT TOP 1 Id FROM table_name ORDER BY 1 DESC

或在 LINQ 中:

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