Garantizar ID

08/11/2004 - 16:53 por Antonio | Informe spam
Hola a todos en el foro. ¿Cuál es la mejor forma de recuperar el campo
identidad, después de haber realizado un INSERT?. Ahora mismo utilizo un
procedimiento almacenado que recibe un paramétro de salida @id para
conocerlo, ej:

CREATE PROCEDURE GuardarUnidad @descripcion VARCHAR(90), @id INT OUTPUT AS
INSERT INTO Unidades (descripcion) VALUES (@descripcion)
SET @id = @@IDENTITY
GO

Funciona bien; aunque debo decir que las pruebas las realizó desde la misma
máquina. El asunto es que el servidor recibirá varías conexiones
simultáneas, de modo que en algún momento podrías haber varios usuarios
realizando un INSERT a la misma tabla y tengo la duda de que valor me
devolverá @id en ese caso, el valor que el usuario ingresó o el último valor
que entra, que puede no ser el mismo.

Gracias.

Un saludo,
Antonio.
 

Leer las respuestas

#1 qwalgrande
08/11/2004 - 17:09 | Informe spam
Hola.

Te recomiendo usar la función SCOPE_IDENTITY(), que te devuelve el último
identificador que insertó tu ámbito, en este caso, tu procedimiento
almacenado. @@identity devuelve el último insertado en general, lo hayas
metido tú u otro usuario con otra conexión.

qwalgrande.

"Antonio" wrote:

Hola a todos en el foro. ¿Cuál es la mejor forma de recuperar el campo
identidad, después de haber realizado un INSERT?. Ahora mismo utilizo un
procedimiento almacenado que recibe un paramétro de salida @id para
conocerlo, ej:

CREATE PROCEDURE GuardarUnidad @descripcion VARCHAR(90), @id INT OUTPUT AS
INSERT INTO Unidades (descripcion) VALUES (@descripcion)
SET @id = @@IDENTITY
GO

Funciona bien; aunque debo decir que las pruebas las realizó desde la misma
máquina. El asunto es que el servidor recibirá varías conexiones
simultáneas, de modo que en algún momento podrías haber varios usuarios
realizando un INSERT a la misma tabla y tengo la duda de que valor me
devolverá @id en ese caso, el valor que el usuario ingresó o el último valor
que entra, que puede no ser el mismo.

Gracias.

Un saludo,
Antonio.



Preguntas similares