Recuperar el ultimo registro insertado en un base de datos

10/06/2005 - 11:00 por [Juanjo] | Informe spam
Hola grupo:

Tengo una aplicacion windows que inserta registros en una tabla de una
base de datos MSDE.
Para insertar los registros uso un componente sqlDataAdapter y el metodo
InsertComand, especificando
los campos,etc. La tabla donde inserto tiene una clave primaria
autonumerica, por lo que no tengo que
especificar este campo cuando inserto algun registro.

El problema que tengo es que necesito recuperar esta clave primaria
cuando inserto un registro
y no me vale hacer un select acontinuacion del insert, pues se puede dar el
caso de que se inserten
varios registros a la vez por lo que el valor que recupero no sea el
correcto.

Alguien me puede decir si hay alguna forma de recuperar este valor, o
como acceder al
parametro @@IDENTITY de la consulta:
INSERT INTO Conceptos (Concepto, Estado) VALUES (@Concepto,
@Estado);
SELECT Clave, Concepto, Estado FROM Conceptos WHERE (Clave =
@@IDENTITY)

Muchas gracias.
 

Leer las respuestas

#1 Víctor
10/06/2005 - 12:26 | Informe spam
Un ejemplo:

string scQuery="INSERT INTO Comunicado_Perfil (IdComu, IdPerfil) VALUES
(2, 2);";
scQuery += "SELECT IDENT_CURRENT('Comunicado_Perfil') AS UltimoId";

SqlCommand comando= new SqlCommand(scQuery, conexion);
myCommand.Connection.Open();
int identidad=(int) myCommand.ExecuteScalar();
conexion.Close();


Fijate que al propio comando de inserción se le añade un SELECT. La función
IDENT_CURRENT('nombre_tabla'), devuelve el último valor de identidad para la
tabla especificada en cualquier sesión y cualquier alcance. También podrías
usar SCOPE_IDENTITY() o @@IDENTITY, pero están limitados en sesiones o
alcance.

Ejecuta la consulta con SqlCommand.ExecuteScalar(), de esta forma te
devolvera el valor de la primera columna de la primera fila de los
resultados devueltos, que para el caso del ejemplo es la última identidad
insertada en la tabla.

Un saludo.
Víctor.

Preguntas similares