¿Cómo obtener la última identificación insertada?

Resuelto anthonypliu asked hace 13 años • 18 respuestas

Tengo este código:

string insertSql = 
    "INSERT INTO aspnet_GameProfiles(UserId,GameId) VALUES(@UserId, @GameId)";

using (SqlConnection myConnection = new SqlConnection(myConnectionString))
{
   myConnection.Open();

   SqlCommand myCommand = new SqlCommand(insertSql, myConnection);

   myCommand.Parameters.AddWithValue("@UserId", newUserId);
   myCommand.Parameters.AddWithValue("@GameId", newGameId);

   myCommand.ExecuteNonQuery();

   myConnection.Close();
}

Cuando inserto en esta tabla, tengo una columna de clave principal auto_increment int llamada GamesProfileId, ¿cómo puedo obtener la última insertada después de esto para poder usar esa identificación para insertar en otra tabla?

anthonypliu avatar Mar 08 '11 12:03 anthonypliu
Aceptado

Para SQL Server 2005+, si no hay un activador de inserción, cambie la instrucción de inserción (toda una línea, dividida aquí para mayor claridad) a esta

INSERT INTO aspnet_GameProfiles(UserId,GameId)
OUTPUT INSERTED.ID
VALUES(@UserId, @GameId)

Para SQL Server 2000, o si hay un activador de inserción:

INSERT INTO aspnet_GameProfiles(UserId,GameId) 
VALUES(@UserId, @GameId);
SELECT SCOPE_IDENTITY()

Y luego

 Int32 newId = (Int32) myCommand.ExecuteScalar();
gbn avatar Mar 08 '2011 05:03 gbn

Puede crear un SqlCommand con CommandTextigual a

INSERT INTO aspnet_GameProfiles(UserId, GameId) OUTPUT INSERTED.ID VALUES(@UserId, @GameId)

y ejecutar int id = (int)command.ExecuteScalar.

Este artículo de MSDN le brindará algunas técnicas adicionales.

jason avatar Mar 08 '2011 05:03 jason
string insertSql = 
    "INSERT INTO aspnet_GameProfiles(UserId,GameId) VALUES(@UserId, @GameId)SELECT SCOPE_IDENTITY()";

int primaryKey;

using (SqlConnection myConnection = new SqlConnection(myConnectionString))
{
   myConnection.Open();

   SqlCommand myCommand = new SqlCommand(insertSql, myConnection);

   myCommand.Parameters.AddWithValue("@UserId", newUserId);
   myCommand.Parameters.AddWithValue("@GameId", newGameId);

   primaryKey = Convert.ToInt32(myCommand.ExecuteScalar());

   myConnection.Close();
}

Esto funcionará.

Jeba Ranganathan avatar Oct 23 '2015 09:10 Jeba Ranganathan