可能重复:
如何获取最后插入的 id?
我试图获取最后一个 id(identity
列的最后一个值)以在每次将数据插入表时将其显示在控件上,该控件递增 1。
如何使用 C# 在 SQL Server 2005 的存储过程中获取最后一个 id?
可能重复:
如何获取最后插入的 id?
我试图获取最后一个 id(identity
列的最后一个值)以在每次将数据插入表时将其显示在控件上,该控件递增 1。
如何使用 C# 在 SQL Server 2005 的存储过程中获取最后一个 id?
要么在插入发生时获取最新的 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 时无法获取它,您可以稍后随时检查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();
}
标识列在数据库中递增,而不是在 C# 端。您可以像这样查询最后一个值:
SELECT MAX(id) FROM mytable
你可以用这个
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();