¿Cómo obtener la última identificación insertada?
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?
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();
Puede crear un SqlCommand con CommandText
igual 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.
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á.