sql >> Base de Datos >  >> RDS >> Sqlserver

Use IDENT_CURRENT() para devolver el valor de identidad actual en una columna de identidad en SQL Server

En SQL Server, puede usar T-SQL IDENT_CURRENT() función para devolver el último valor de identidad generado para una tabla o vista especificada en una columna de identidad. El último valor de identidad generado puede ser para cualquier sesión y cualquier ámbito.

Sintaxis

La sintaxis es así:

IDENT_CURRENT( 'table_or_view' )

La tabla_o_vista argumento es el nombre de la tabla o vista cuyo valor de identidad se devuelve.

Ejemplo 1:uso básico

Aquí hay un ejemplo de código básico.

SELECT IDENT_CURRENT('Pets') AS Result;

Resultado:

+----------+
| Result   |
|----------|
| 3        |
+----------+

En este caso, el valor de identidad actual es 3.

Aquí hay otra consulta que verifica más tablas.

SELECT 
  IDENT_CURRENT('Pets') AS Pets,
  IDENT_CURRENT('BestFriends') AS BestFriends,
  IDENT_CURRENT('Cities') AS Cities;

Resultado:

+--------+---------------+----------+
| Pets   | BestFriends   | Cities   |
|--------+---------------+----------|
| 3      | 121           | 180      |
+--------+---------------+----------+

Ejemplo 2:inclusión del esquema

También puede incluir el esquema en el argumento.

SELECT IDENT_CURRENT('dbo.Pets') AS Result;

Resultado:

+----------+
| Result   |
|----------|
| 3        |
+----------+

Ejemplo 3:después de una inserción

En este ejemplo, inserto dos filas más en Mascotas tabla, luego seleccione IDENT_CURRENT() de nuevo.

INSERT INTO Pets (PetName)
VALUES ('Brian'), ('Alf');

SELECT IDENT_CURRENT('dbo.Pets') AS Result;

Resultado:

+----------+
| Result   |
|----------|
| 5        |
+----------+

Así es como se ve la tabla:

SELECT * FROM Pets;

Resultado:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 1       | Homer     |
| 2       | Felix     |
| 3       | Ruff      |
| 4       | Brian     |
| 5       | Alf       |
+---------+-----------+

El PetId columna es la columna de identidad. Su valor inicial es 1 y su valor de incremento también es 1.

Consulte Cómo utilizar la propiedad IDENTITY() en SQL Server para conocer el código utilizado para crear esta tabla.

Ejemplo 4:comprobar todas las tablas de la base de datos

Este es un ejemplo de verificación de todas las tablas en la base de datos para su valor inicial de identidad.

SELECT 
  TABLE_SCHEMA, 
  TABLE_NAME,   
  IDENT_CURRENT(TABLE_SCHEMA + '.' + TABLE_NAME) AS IDENT_CURRENT  
FROM INFORMATION_SCHEMA.TABLES  
WHERE IDENT_CURRENT(TABLE_SCHEMA + '.' + TABLE_NAME) IS NOT NULL;

Resultado:

+----------------+----------------+-----------------+
| TABLE_SCHEMA   | TABLE_NAME     | IDENT_CURRENT   |
|----------------+----------------+-----------------|
| dbo            | ConstraintTest | 17              |
| dbo            | Event          | 1               |
| dbo            | Scoreboard     | 8               |
| dbo            | Pets           | 5               |
| dbo            | BestFriends    | 121             |
| dbo            | Cities         | 180             |
| dbo            | Colors         | 6               |
| dbo            | t6             | 1               |
| dbo            | t7             | 100             |
+----------------+----------------+-----------------+

Acerca del valor de retorno

El valor de retorno para IDENT_CURRENT() es numeric(@@MAXPRECISION,0)) . Esto significa que es un tipo de dato numérico con una precisión y escala fijas.

La precisión depende del servidor. El @@MAXPRECISION El argumento devuelve el nivel utilizado por los tipos de datos numéricos y decimales tal como se establece actualmente en el servidor. La precisión especifica el número total máximo de dígitos decimales (incluye los del lado izquierdo y derecho del punto decimal).

El segundo argumento especifica una escala de 0 , lo que significa que no hay dígitos decimales a la derecha del lugar decimal.

Puede ejecutar la siguiente consulta para encontrar el nivel de precisión establecido actualmente en su servidor:

SELECT @@MAX_PRECISION AS [Max Precision];

Aquí está el resultado en mi sistema:

+-----------------+
| Max Precision   |
|-----------------|
| 38              |
+-----------------+

Crear una columna de identidad

Puede crear una columna de identidad usando IDENTITY() propiedad en su CREATE TABLE o ALTER TABLE declaración.

Otra forma de crear una columna de identidad es IDENTITY() función. Esto le permite crear una columna de identidad cuando usa un SELECT INTO declaración para transferir datos de una fuente a otra.

Diferencias con @@IDENTITY y SCOPE_IDENTITY()

El IDENT_CURRENT() la función es similar a @@IDENTITY y SCOPE_IDENTITY() , pero hay algunas diferencias.

@@IDENTITY y SCOPE_IDENTITY() devolver el último valor de identidad generado en any tabla en la sesión actual. Sin embargo, la diferencia entre estas dos funciones es que SCOPE_IDENTITY devuelve el valor solo dentro del alcance actual, mientras que @@IDENTITY no se limita a un ámbito específico.

IDENT_CURRENT() por otro lado, no está limitado por el alcance o sesión. Más bien, se limita a una tabla específica. . Devuelve el valor de identidad generado para una tabla específica en cualquier sesión y cualquier ámbito.

Ver IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY en SQL Server:¿Cuál es la diferencia? para un ejemplo simple que explica las diferencias entre estas tres funciones.