Servidor Sql devuelve el valor de la columna de identidad después de insert la instrucción

¿Es posible en el server sql que usa el procedimiento almacenado devolver el valor de la columna de identidad en una tabla contra la cual se insertan algunos valores? Por ejemplo, utilizando el procedimiento almacenado si insertamos datos en una tabla:

Tabla TBL

  • ID de usuario integer, identidad, autoincrementado
  • Nombre varchar
  • UserName varchar
  • Contraseña varchar

Entonces, si ejecuto el procedimiento de almacenamiento inserto algunos valores como:

Insert into TBL (Name, UserName, Password) Values ('example', 'example', '$2a$12$00WFrz3dOfLaIgpTYRJ9CeuB6VicjLGhLset8WtFrzvtpRekcP1lq') 

¿Cómo puedo devolver el valor de UserID en el que tendrá lugar esta inserción? Necesito El valor de UserID para algunas otras operaciones, ¿alguien puede resolver esto?

 Insert into TBL (Name, UserName, Password) Output Inserted.IdentityColumnName Values ('example', 'example', 'example') 

enviar un parámetro de salida como

 @newId int output 

al final use

  select @newId = Scope_Identity() return @newID 

Para recuperar el último valor de identidad que se genera. La forma más común es usar SCOPE_IDENTITY () function incorporada.

Además, a partir de esto, también tienes la function @@ IDENTITY e IDENT_CURRENT ('TableName') .

 Select SCOPE_IDENTITY() Select @@IDENTITY Select IDENT_CURRENT('tblPerson') 

SCOPE_IDENTITY (): devuelve el último valor de identidad que se crea en la misma session y en el mismo ámbito.

@@ IDENTIDAD: devuelve el último valor de identidad que se crea en la misma session y en cualquier ámbito.

IDENT_CURRENT ('TableName') – devuelve el último valor de identidad que se crea para una tabla específica en cualquier session y cualquier ámbito.

Por ejemplo:

SCOPE_IDENTITY () devuelve el último valor de identidad que se crea en la misma session (Conexión) y en el mismo ámbito (en el mismo procedimiento almacenado, function, activador).

Digamos que tengo 2 tablas tblPerson1 y tblPerson2, y tengo un activador en la tabla tblPerson1, que insertá un logging en la tabla tblPerson2. Ahora, cuando inserta un logging en la tabla tblPerson1, SCOPE_IDENTITY () devuelve el valor de idetentity que se genera en la tabla tblPerson1

Donde regresa @@ IDENTITY, el valor que se genera en la tabla tblPerson2. Por lo tanto, @@ IDENTITY devuelve el último valor de identidad que se crea en la misma session sin tener en count el scope.

IDENT_CURRENT ('tblPerson') devuelve el último valor de identidad creado para una tabla específica en cualquier session y cualquier ámbito.

Aquí hay varias forms diferentes de get la identificación, incluida Scope_Identity:

https://stackoverflow.com/a/42655/1504882

 SELECT SCOPE_IDENTITY() 

después de la instrucción de inserción

Por favor, consulte los siguientes enlaces

http://msdn.microsoft.com/en-us/library/ms190315.aspx

Puede recuperar explícitamente columnas de Identidad utilizando la cláusula OUTPUT de SqlServer: suponiendo que tiene una columna de identificación / incremento automático llamada ID:

 $sql='INSERT INTO [xyz].[myTable] (Field1, Field2, Field3) OUTPUT Inserted.ID VALUES (1, 2, '3')'; 

Tenga en count que en Perl DBI debería ejecutar la instrucción INSERT, al igual que era un SELECCIONAR. Y captura la salida como si fuera un SELECTO

 $sth->execute($sql); @row=$sth->fetchrow_array; #Only 1 val in 1 row returned print "Inserted ID: ", $row[0], "\n"; 

Presumiblemente esto es preferible porque no requiere otra request.

Puede usar Scope_Identity () para get el último valor.

Lea estos también:

También puedes usar SELECT @@ IDENTITY

@@IDENTIDAD

Después de completar una instrucción INSERT, SELECT INTO o bulk copy, @@ IDENTITY contiene el último valor de identidad generado por la instrucción. Si la statement no afectó ninguna tabla con columnas de identidad, @@ IDENTITY devuelve NULL. Si se insertan varias filas, generando múltiples valores de identidad, @@ IDENTITY devuelve el último valor de identidad generado. Si la statement desencadena uno o más desencadenantes que realizan inserciones que generan valores de identidad, se llama a @@ IDENTITY inmediatamente después de que la statement devuelve el último valor de identidad generado por los desencadenadores. Si se dispara un desencadenante después de una acción de inserción en una tabla que tiene una columna de identidad y el desencadenador se inserta en otra tabla que no tiene una columna de identidad, @@ IDENTIDAD devuelve el valor de identidad de la primera inserción. El valor de @@ IDENTITY no revierte a una configuration anterior si la instrucción INSERT o SELECT INTO o la copy masiva falla, o si la transacción se revierte.