Pregunta Cómo obtener el valor de autoincrement de la última fila en la inserción


He buscado este problema en Google una semana y no hay nada útil, creo que no estoy usando la palabra correcta

Estoy usando SQL Server 2008 con t-sql y mi necesidad es optimizar mi función cuando inserte una nueva fila.

Tengo una tabla con la primera columna es la clave del tipo de autoincremento entero y otras columnas son solo para información

Cuando hacemos una inserción, SQL Server incrementa la clave automáticamente y tengo que hacer un máximo de selección para obtener el valor, por lo que hay una manera como una variable global como @@IDENTITY o una función para evitar la transacción de inicio y seleccionar max


17
2017-11-19 09:39


origen


Respuestas:


Utilizar SCOPE_IDENTITY:

-- do insert

SELECT SCOPE_IDENTITY();

Lo cual te dará:

El último valor de identidad insertado en una columna de identidad en   el mismo alcance Un alcance es un módulo: un procedimiento almacenado, disparador,   función o lote. Por lo tanto, dos declaraciones están en el mismo alcance si   están en el mismo procedimiento almacenado, función o lote.


32
2017-11-19 09:42



Simplemente ejecuté el código:

INSERT INTO Persons (FirstName) VALUES ('Joe');
SELECT ID AS LastID FROM Persons WHERE ID = @@Identity;

¡y también funciona!


4
2017-10-15 12:10



¿Qué pasa con este último valor de incremento automático?

SELECT IDENT_CURRENT('tableName')-IDENT_INCR('tableName');

3
2017-11-19 10:27



Si está utilizando MySQL obtendrá el ID de incremento automático de la última inserción con:

SELECT LAST_INSERT_ID();

Ver aquí para referencia completa.


0
2018-05-31 18:27



En mi caso, tuve que usar @@ Identity porque estaba insertando en una vista. Parece que SCOPE_IDENTITY solo funciona para los que ha creado explícitamente.

Mira aquí:

http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

@@ IDENTITY devolverá el último valor de identidad ingresado en una tabla en   tu sesión actual Mientras @@ IDENTITY está limitado a la corriente   sesión, no está limitado al alcance actual. Si tienes un disparador   en una tabla que hace que se cree una identidad en otra tabla,   obtendrá la identidad que se creó en último lugar, incluso si fue el   disparador que lo creó.


0
2017-10-25 16:12