Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
Se aplica a:SQL Server
Azure SQL Database
Instancia
administrada de Azure SQLBase de datos SQL en Microsoft Fabric
La IDENT_CURRENT función del sistema devuelve el último valor de identidad generado para una tabla o vista especificada. El último valor de identidad generado puede ser para cualquier sesión y cualquier ámbito.
Convenciones de sintaxis de Transact-SQL
Sintaxis
IDENT_CURRENT( 'table_or_view' )
Argumentos
table_or_view
El nombre de la tabla o vista cuyo valor de identidad se devuelve. table_or_view es varchar, sin valor predeterminado.
Tipos de retorno
numeric(@@MAXPRECISION,0))
Excepciones
Devuelve NULL el error o si un autor de la llamada no tiene permiso para ver el objeto.
En SQL Server, un usuario solo puede ver los metadatos de elementos protegibles que posea o para los que se le haya concedido permiso. Esto significa que funciones integradas que emiten metadatos, como puede IDENT_CURRENT regresar NULL si el usuario no tiene ningún permiso sobre el objeto. Para obtener más información, consulte Metadata Visibility Configuration.
Comentarios
IDENT_CURRENTes similar a las funciones SCOPE_IDENTITY identidad de SQL Server 2000 (8.x) y @@IDENTITY. Las tres funciones devuelven los últimos valores de identidad generados. Pero la definición de últimos valores de identidad para cada una de estas funciones es diferente en cuanto al ámbito y la sesión:
-
IDENT_CURRENTdevuelve el último valor de identidad generado para una tabla específica en cualquier sesión y en cualquier ámbito. -
@@IDENTITYdevuelve el último valor de identidad generado para cualquier tabla en la sesión actual, en todos los ámbitos. -
SCOPE_IDENTITYdevuelve el último valor identidad generado para cualquier tabla en la sesión actual y el alcance actual.
Cuando el IDENT_CURRENT valor es NULL (porque la tabla nunca ha contenido filas ni ha sido truncada), la IDENT_CURRENT función devuelve el valor semilla.
Las instrucciones y transacciones con errores pueden cambiar la identidad actual de una tabla y crear huecos en los valores de columna de identidad. 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. Por ejemplo, si se produce un error en una INSERT instrucción debido a una IGNORE_DUP_KEY infracción, el valor de identidad actual de la tabla todavía se incrementa.
Cuando se usa IDENT_CURRENT en una vista que contiene joins, NULL se devuelve . Esto es independiente de si solo una o varias tablas combinadas tienen una columna de identidad.
Importante
Ten precaución al usar IDENT_CURRENT para predecir el siguiente valor de identidad generado. El valor real generado puede ser diferente del IDENT_CURRENT plus IDENT_INCR debido a las inserciones realizadas por otras sesiones.
La IDENT_CURRENT función no está disponible para las columnas identidad en Fabric Data Warehouse.
Ejemplos
A. Devuelve el último valor de identidad generado para una tabla específica
En el ejemplo siguiente se devuelve el último valor de identidad generado para la tabla Person.Address en la base de datos AdventureWorks2025.
USE AdventureWorks2022;
GO
SELECT IDENT_CURRENT ('Person.Address') AS Current_Identity;
GO
B. Compara los valores de identidad devueltos por IDENT_CURRENT, @@IDENTITY y SCOPE_IDENTITY
En el ejemplo siguiente se muestran los distintos valores de identidad devueltos por IDENT_CURRENT, @@IDENTITY y SCOPE_IDENTITY.
USE AdventureWorks2022;
GO
IF OBJECT_ID(N't6', N'U') IS NOT NULL
DROP TABLE t6;
GO
IF OBJECT_ID(N't7', N'U') IS NOT NULL
DROP TABLE t7;
GO
CREATE TABLE t6(id INT IDENTITY);
CREATE TABLE t7(id INT IDENTITY(100,1));
GO
CREATE TRIGGER t6ins ON t6 FOR INSERT
AS
BEGIN
INSERT t7 DEFAULT VALUES
END;
GO
--End of trigger definition
SELECT id FROM t6;
--IDs empty.
SELECT id FROM t7;
--ID is empty.
--Do the following in Session 1
INSERT t6 DEFAULT VALUES;
SELECT @@IDENTITY;
/*Returns the value 100. This was inserted by the trigger.*/
SELECT SCOPE_IDENTITY();
/* Returns the value 1. This was inserted by the
INSERT statement two statements before this query.*/
SELECT IDENT_CURRENT('t7');
/* Returns value inserted into t7, that is in the trigger.*/
SELECT IDENT_CURRENT('t6');
/* Returns value inserted into t6. This was the INSERT statement four statements before this query.*/
-- Do the following in Session 2.
SELECT @@IDENTITY;
/* Returns NULL because there has been no INSERT action
up to this point in this session.*/
SELECT SCOPE_IDENTITY();
/* Returns NULL because there has been no INSERT action
up to this point in this scope in this session.*/
SELECT IDENT_CURRENT('t7');
/* Returns the last value inserted into t7.*/