1

重複の可能性:
最後に挿入されたIDを取得する方法は?

identityデータがテーブルに挿入されるたびに1ずつ増加するコントロールに表示するために、最後のID(列の最後の値)を取得しようとしています。

C#を使用してSQL Server 2005のストアドプロシージャでこの最後のIDを取得するにはどうすればよいですか?

4

4 に答える 4

2

ID列は、C#側ではなく、データベースでインクリメントされます。次のように最後の値を照会できます。

SELECT MAX(id) FROM mytable
于 2012-05-12T10:30:53.320 に答える
2

挿入が発生したときに(を使用して)最新のIDを取得するか、後で列SCOPE_IDENTITY()の現在の値を確認する必要がある場合は、を使用してその値を取得します。IDENTITYSELECT 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();
}
于 2012-05-12T11:48:01.360 に答える
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);
    }
}

編集

違いを感じるための素晴らしいリンク @@IDENTITYとSCOPE_IDENTITYをトリガーで使用する

于 2012-05-12T10:32:27.407 に答える
0
SELECT TOP 1 Id FROM table_name ORDER BY 1 DESC

またはLINQ:

context.table.Select(x->x.Id).OrderByDescending(x->x.Id).FirstOrDefault();
于 2012-05-12T10:29:40.823 に答える