sql - registro - scope_identity() ejemplo
El servidor Sql devuelve el valor de la columna de identidad después de insertar la instrucción (9)
¿Es posible en el servidor sql usar un procedimiento almacenado devolver el valor de la columna de identidad en una tabla en la que se insertan algunos valores? Por ejemplo, utilizando un procedimiento almacenado si insertamos datos en una tabla:
Tabla TBL
- ID de usuario entero, identidad, auto-incrementado
- Nombre varchar
- Nombre de usuario varchar
- Contraseña varchar
Entonces si ejecuto el procedimiento de almacenamiento insertando 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 otras operaciones, ¿alguien puede resolver esto?
Aquí van algunas formas diferentes de obtener la ID, incluyendo Scope_Identity:
https://.com/a/42655/1504882
Para recuperar el último valor de identidad que se genera. La forma más común es usar la función integrada SCOPE_IDENTITY () .
Aparte de esto, también tiene la función @@ 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 sesión y en el mismo ámbito.
@@ IDENTIDAD: devuelve el último valor de identidad que se crea en la misma sesión y en cualquier ámbito.
IDENT_CURRENT (''TableName''): devuelve el último valor de identidad que se crea para una tabla específica en cualquier sesión y cualquier ámbito.
Por ejemplo:
SCOPE_IDENTITY () devuelve el último valor de identidad que se crea en la misma sesión (Conexión) y en el mismo ámbito (en el mismo procedimiento almacenado, función, disparador).
Digamos, tengo 2 tablas tblPerson1 y tblPerson2, y tengo un disparador en la tabla tblPerson1, que insertará un registro en la tabla tblPerson2. Ahora, cuando inserta un registro en la tabla tblPerson1, SCOPE_IDENTITY () devuelve el valor de idetentity que se genera en la tabla tblPerson1
Donde como @@ IDENTITY devuelve, 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 sesión sin tener en cuenta el alcance.
IDENT_CURRENT (''tblPerson'') devuelve el último valor de identidad creado para una tabla específica en cualquier sesión y cualquier ámbito.
Puede recuperar de forma explícita las columnas de Identidad utilizando la cláusula OUTPUT de SqlServer: asumiendo que tiene una columna de identidad / incremento automático llamada ID:
$sql=''INSERT INTO [xyz].[myTable] (Field1, Field2, Field3) OUTPUT Inserted.ID VALUES (1, 2, ''3'')'';
Tenga en cuenta que en Perl DBI usted ejecutaría la instrucción INSERT, como si fuera un SELECT. Y captura la salida como si fuera un SELECT.
$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 solicitud.
Puedes usar Scope_Identity() para obtener el último valor.
Lea esto también:
Puedes usar SELECT @@ IDENTITY también
enviar un parámetro de salida como
@newId int output
al final uso
select @newId = Scope_Identity()
return @newID
@@IDENTIDAD
Después de completar una instrucción INSERT, SELECT INTO o una copia masiva, @@ IDENTITY contiene el último valor de identidad generado por la instrucción. Si la declaración no afectó a 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 instrucción activa uno o más desencadenantes que realizan inserciones que generan valores de identidad, llamar a @@ IDENTITY inmediatamente después de que la declaración devuelva el último valor de identidad generado por los desencadenadores. Si se dispara un disparador después de una acción de inserción en una tabla que tiene una columna de identidad, y el disparador se inserta en otra tabla que no tiene una columna de identidad, @@ IDENTITY devuelve el valor de identidad de la primera inserción. El valor @@ IDENTITY no vuelve a una configuración anterior si la instrucción INSERT o SELECT INTO o la copia masiva fallan, o si la transacción se revierte.
Insert into TBL (Name, UserName, Password) Output Inserted.IdentityColumnName
Values (''example'', ''example'', ''example'')
SELECT SCOPE_IDENTITY()
después de la declaración de inserción
Por favor, consulte los siguientes enlaces