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.

Preguntas similare

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.



Respuesta Responder a este mensaje
#2 Antonio
08/11/2004 - 17:20 | Informe spam
"qwalgrande" <qwalgrande*nospam*@yahoo.es> escribió en el mensaje
news:
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.



Hola qwalgrande, gracias por la respuesta.

Justo acabo de ver esa función. Voy probarlo.

Un saludo,
Antonio.
Respuesta Responder a este mensaje
#3 MAXI
09/11/2004 - 01:23 | Informe spam
Antonio, a mejor forma seria no usar identities para estas cosas :-), los
campos identities no son buenos para numeradores que expongan datos a los
usuarios!!

De todas formas lo mejor a mi criterio seria usar SCOPE_IDENTITY()

Suerte




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messenger:

"Antonio" escribió en el mensaje
news:OD%
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.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida