重複の可能性:
最後に挿入されたIDを取得する方法は?
identity
データがテーブルに挿入されるたびに1ずつ増加するコントロールに表示するために、最後のID(列の最後の値)を取得しようとしています。
C#を使用してSQL Server 2005のストアドプロシージャでこの最後のIDを取得するにはどうすればよいですか?
重複の可能性:
最後に挿入されたIDを取得する方法は?
identity
データがテーブルに挿入されるたびに1ずつ増加するコントロールに表示するために、最後のID(列の最後の値)を取得しようとしています。
C#を使用してSQL Server 2005のストアドプロシージャでこの最後のIDを取得するにはどうすればよいですか?
ID列は、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();
}
IDENTITY
または、挿入されているIDを取得できない場合は、次のように使用して、特定のテーブルの列の現在最後に使用された値を後でいつでも確認できます。
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();