& #x 40; & #x 40; identidad (Transact-SQL)@@IDENTITY (Transact-SQL)

ESTE TEMA SE APLICA A:síSQL Server (a partir de 2008)síAzure SQL DatabasenoAzure SQL Data Warehouse noAlmacenamiento de datos paralelos THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Se trata de una función del sistema que devuelve el último valor de identidad insertado.Is a system function that returns the last-inserted identity value.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

@@IDENTITY  

Tipos devueltosReturn Types

numeric(38,0)numeric(38,0)

ComentariosRemarks

Después de una INSERCIÓN, SELECT INTO o masiva se complete la instrucción de copia, @@IDENTITY contiene el último valor de identidad generado por la instrucción.After an INSERT, SELECT INTO, or bulk copy statement is completed, @@IDENTITY contains the last identity value that is generated by the statement. Si la instrucción no afectó a ninguna tabla con columnas de identidad, @@IDENTITY devuelve NULL.If the statement did not affect any tables with identity columns, @@IDENTITY returns NULL. Si se insertan varias filas, generar varios valores de identidad, @@IDENTITY devuelve el último valor de identidad generado.If multiple rows are inserted, generating multiple identity values, @@IDENTITY returns the last identity value generated. Si la instrucción activa uno o más desencadenadores que realizan inserciones que generan valores de identidad, al llamar a@IDENTITY inmediatamente después de la instrucción devuelve el último valor de identidad generado por los desencadenadores.If the statement fires one or more triggers that perform inserts that generate identity values, calling @@IDENTITY immediately after the statement returns the last identity value generated by the triggers. Si un desencadenador se activa después de una acción insert en una tabla que tiene una columna de identidad, y se inserta en otra tabla que no tiene una columna de identidad, @@IDENTITY devuelve el valor de identidad de la primera instrucción insert.If a trigger is fired after an insert action on a table that has an identity column, and the trigger inserts into another table that does not have an identity column, @@IDENTITY returns the identity value of the first insert. El @@IDENTITY valor no vuelve a un valor anterior si se produce un error en la copia de instrucción o bulk INSERT o SELECT INTO, o si se revierte la transacción.The @@IDENTITY value does not revert to a previous setting if the INSERT or SELECT INTO statement or bulk copy fails, or if the transaction is rolled back.

Las instrucciones y transacciones con errores pueden cambiar la identidad actual de una tabla y crear huecos en los valores de columna de identidad.Failed statements and transactions can change the current identity for a table and create gaps in the identity column values. El valor de identidad jamás se revierte, aun cuando no se haya confirmado la transacción que intentó insertar el valor en la tabla.The identity value is never rolled back even though the transaction that tried to insert the value into the table is not committed. Por ejemplo, si se produce un error en una instrucción INSERT debido a una infracción de tipo IGNORE_DUP_KEY, el valor de identidad actual de la tabla se sigue incrementando.For example, if an INSERT statement fails because of an IGNORE_DUP_KEY violation, the current identity value for the table is still incremented.

@@IDENTITY, SCOPE_IDENTITY e IDENT_CURRENT son funciones parecidas ya que devuelven el último valor insertado en la columna de identidad de una tabla.@@IDENTITY, SCOPE_IDENTITY, and IDENT_CURRENT are similar functions because they all return the last value inserted into the IDENTITY column of a table.

@@IDENTITY y SCOPE_IDENTITY devuelve el último valor de identidad generado en cualquier tabla en la sesión actual.@@IDENTITY and SCOPE_IDENTITY return the last identity value generated in any table in the current session. No obstante, SCOPE_IDENTITY devuelve el valor dentro del ámbito actual; @@IDENTITY no está limitado a un ámbito concreto.However, SCOPE_IDENTITY returns the value only within the current scope; @@IDENTITY is not limited to a specific scope.

IDENT_CURRENT no está limitado por el ámbito y la sesión; se limita a una tabla especificada.IDENT_CURRENT is not limited by scope and session; it is limited to a specified table. IDENT_CURRENT devuelve el valor de identidad generado para una tabla específica en cualquier sesión y cualquier ámbito.IDENT_CURRENT returns the identity value generated for a specific table in any session and any scope. Para obtener más información, vea IDENT_CURRENT ( Transact-SQL ) .For more information, see IDENT_CURRENT (Transact-SQL).

El ámbito de la @@IDENTITY función es la sesión actual en el servidor local en el que se ejecuta.The scope of the @@IDENTITY function is current session on the local server on which it is executed. Esta función no se puede aplicar a servidores remotos o vinculados.This function cannot be applied to remote or linked servers. Para obtener un valor de identidad de un servidor diferente, ejecute un procedimiento almacenado en ese servidor remoto o vinculado y haga que dicho procedimiento (que se está ejecutando en el contexto del servidor remoto o vinculado) recopile el valor de identidad y lo devuelva a la conexión que llama del servidor local.To obtain an identity value on a different server, execute a stored procedure on that remote or linked server and have that stored procedure (which is executing in the context of the remote or linked server) gather the identity value and return it to the calling connection on the local server.

La replicación puede afectar a las @@IDENTITY valor, puesto que se usa dentro de los procedimientos almacenados y desencadenadores de replicación.Replication may affect the @@IDENTITY value, since it is used within the replication triggers and stored procedures. @@IDENTITY no es un indicador confiable de la identidad más reciente creada por el usuario si la columna forma parte de un artículo de replicación.@@IDENTITY is not a reliable indicator of the most recent user-created identity if the column is part of a replication article. Puede usar la sintaxis de la función SCOPE_IDENTITY () en lugar de @@IDENTITY.</span><span class="sxs-lookup">You can use the SCOPE_IDENTITY() function syntax instead of @@IDENTITY.</span></span> Para obtener más información, vea SCOPE_IDENTITY ( Transact-SQL )For more information, see SCOPE_IDENTITY (Transact-SQL)

Nota

La llamada a procedimiento almacenado o Transact-SQLTransact-SQL instrucción se debe escribir para que utilicen el SCOPE_IDENTITY() función, que devuelve la última identidad usada dentro del ámbito de esa instrucción de usuario y no la identidad en el ámbito del desencadenador anidado usado por replicación.The calling stored procedure or Transact-SQLTransact-SQL statement must be rewritten to use the SCOPE_IDENTITY() function, which returns the latest identity used within the scope of that user statement, and not the identity within the scope of the nested trigger used by replication.

EjemplosExamples

En el siguiente ejemplo se inserta una fila en una tabla con una columna de identidad (LocationID) y se utiliza @@IDENTITY para mostrar el valor de identidad empleado en la nueva fila.The following example inserts a row into a table with an identity column (LocationID) and uses @@IDENTITY to display the identity value used in the new row.

USE AdventureWorks2012;  
GO  
--Display the value of LocationID in the last row in the table.  
SELECT MAX(LocationID) FROM Production.Location;  
GO  
INSERT INTO Production.Location (Name, CostRate, Availability, ModifiedDate)  
VALUES ('Damaged Goods', 5, 2.5, GETDATE());  
GO  
SELECT @@IDENTITY AS 'Identity';  
GO  
--Display the value of LocationID of the newly inserted row.  
SELECT MAX(LocationID) FROM Production.Location;  
GO  

Vea tambiénSee Also

Funciones del sistema (Transact-SQL) System Functions (Transact-SQL)
CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
IDENT_CURRENT (Transact-SQL) IDENT_CURRENT (Transact-SQL)
INSERT (Transact-SQL) INSERT (Transact-SQL)
SCOPE_IDENTITY ( Transact-SQL ) SCOPE_IDENTITY (Transact-SQL)
SELECT (Transact-SQL)SELECT (Transact-SQL)