IDENT_CURRENT (Transact-SQL)
Actualizado: 17 de julio de 2006
Devuelve el último valor de identidad generado para una tabla o vista especificada en cualquier sesión y cualquier ámbito.
Convenciones de sintaxis de Transact-SQL
Sintaxis
IDENT_CURRENT( 'table_name' )
Argumentos
- table_name
Es el nombre de la tabla cuyo valor de identidad se devuelve. El tipo de table_name es varchar y no tiene valor predeterminado.
Tipos de valor devueltos
numeric(38,0)
Excepciones
Devuelve NULL si se produce un error o si el autor de la llamada no tiene permiso para ver el objeto.
En SQL Server 2005, un usuario sólo puede ver los metadatos de asegurables que posea o para los que se le haya concedido permiso. Esto significa que las funciones integradas de emisión de metadatos, como IDENT_CURRENT, pueden devolver NULL si el usuario no tiene ningún permiso para el objeto. Para obtener más información, vea Configuración de visibilidad de los metadatos y Solucionar problemas de visibilidad de los metadatos.
Notas
IDENT_CURRENT es similar a las funciones de identidad SCOPE_IDENTITY e @@IDENTITY de SQL Server 2000. Las tres funciones devuelven los últimos valores de identidad generados. Pero la definición de los últimos valores de identidad difiere en el ámbito y la sesión para cada una de estas funciones.
- IDENT_CURRENT devuelve el último valor de identidad generado para una tabla específica en cualquier sesión y cualquier ámbito.
- @@IDENTITY devuelve el último valor de identidad generado para cualquier tabla en la sesión actual, en todos los ámbitos.
- SCOPE_IDENTITY devuelve el último valor de identidad generado para cualquier tabla en la sesión y el ámbito actuales.
La función IDENT_CURRENT devuelve NULL cuando se invoca en una tabla vacía o en una tabla que no tiene ninguna columna de identidad.
Las instrucciones y transacciones con errores pueden cambiar la identidad actual de una tabla y crear espacios en los valores de la columna de identidad. El valor de identidad nunca se revierte aunque la transacción que haya intentado insertar el valor en la tabla no se confirme. Por ejemplo, si se produce un error en una instrucción INSERT debido a una infracción de IGNORE_DUP_KEY, el valor de identidad actual de la tabla se sigue incrementando.
Tenga cuidado al usar IDENT_CURRENT para predecir el siguiente valor de identidad generado. El valor generado real puede ser diferente de IDENT_CURRENT más IDENTITY_SEED a causa de las inserciones realizadas por otras sesiones.
Ejemplos
A. Devolver el último valor de identidad generado para una tabla especificada
En el ejemplo siguiente se devuelve el último valor de identidad generado para la tabla Person.Address
en la base de datos AdventureWorks
.
USE AdventureWorks;
GO
SELECT IDENT_CURRENT ('Person.Address') AS Current_Identity;
GO
B. Comparar 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 AdventureWorks;
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;
--id is 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.*/
Vea también
Referencia
@@IDENTITY (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL)
IDENT_INCR (Transact-SQL)
IDENT_SEED (Transact-SQL)
Expresiones (Transact-SQL)
Funciones del sistema (Transact-SQL)
Ayuda e información
Obtener ayuda sobre SQL Server 2005
Historial de cambios
Versión | Historial |
---|---|
17 de julio de 2006 |
|
14 de abril de 2006 |
|