ExecuteScalar

23/10/2004 - 00:57 por Oscar | Informe spam
Hola a todos,

Tengo un problemilla: Estoy haciendo un Insert into a una tabla que tiene un campo id autonumérico,
y luego tengo que añadir datos a otra tabla y utilizar el último autonumérico que haya generado el
insert into, algo así como,

"Insert into clientes bla bla..."
(me genera un nuevo id)

"insert into otra tabla donde tengo que poner el id recién generado"

La pregunta: Ahora, para salir del paso estoy haciendo lo siguiente:

1 primer insert into, y luego

2 sql="Select Last(Id) From Clientes"
cm.CommandText = sql
id_añadido = cm.ExecuteScalar

3 y una vez que tengo el id_añadido inmediatamente hago el insert into en la otra tabla

Pero claro, me arriesgo a que haya otro usuario desde otro pc se quede con los datos de la segunda
tabla en un registro que él haya añadido entre los pasos 1 y 2.

Con ExecuteScalar, o algo similar, no podría obtener el id generado por la primera insert into
directamente?

Gracias por todo,
Saludos. Oscar
 

Leer las respuestas

#1 Leonardo Azpurua
23/10/2004 - 01:31 | Informe spam
"Oscar" <veletapgARROBAwanadooPUNTOcom> escribió en el mensaje
news:
Hola a todos,

Tengo un problemilla: Estoy haciendo un Insert into a una tabla que tiene
un campo id autonumérico,
y luego tengo que añadir datos a otra tabla y utilizar el último
autonumérico que haya generado el
insert into, algo así como,

"Insert into clientes bla bla..."
(me genera un nuevo id)

"insert into otra tabla donde tengo que poner el id recién generado"

La pregunta: Ahora, para salir del paso estoy haciendo lo siguiente:

1 primer insert into, y luego

2 sql="Select Last(Id) From Clientes"
cm.CommandText = sql
id_añadido = cm.ExecuteScalar

3 y una vez que tengo el id_añadido inmediatamente hago el insert into
en la otra tabla

Pero claro, me arriesgo a que haya otro usuario desde otro pc se quede con
los datos de la segunda
tabla en un registro que él haya añadido entre los pasos 1 y 2.

Con ExecuteScalar, o algo similar, no podría obtener el id generado por la
primera insert into
directamente?

Gracias por todo,
Saludos. Oscar



Hola, Oscar:

Para obtener el ultimo campo autonumerico (en SQL Server o Access) generado
utilizas SELECT @@IDENTITY (en SQL Server o Access). Esta consulta debe
ejecutarse inmediatamente despues de la inserción. Si estás usando SQL
Server, es recomendable que combines la inserción y el SELECT @@IDENTITY en
un SP.

En ambos casos (bien cuando ejecutas un SP cuyo unico SELECT es justamente
SELECT @@IDENTITY, o cuando ejecutas el SELECT @@IDENTITY como CommandText
de un objeto COMMAND. puedes ejecutar ExecuteScalar para obtener el
resultado.

Salud!

Leonardo
mvp vb

Preguntas similares