DBCC CHECKIDENT (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Comprueba el valor de identidad actual de la tabla especificada en SQL Server y, si fuera necesario, lo cambia. También puede utilizar DBCC CHECKIDENT para establecer manualmente un nuevo valor de identidad actual para la columna de identidad.

Convenciones de sintaxis de Transact-SQL

Sintaxis

Sintaxis de SQL Server y Azure SQL Database:

DBCC CHECKIDENT
 (
    table_name
        [ , { NORESEED | { RESEED [ , new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]

Sintaxis para Azure Synapse Analytics:

DBCC CHECKIDENT
 (
    table_name
        [ RESEED , new_reseed_value ]
)
[ WITH NO_INFOMSGS ]

Nota

Para ver la sintaxis de Transact-SQL para SQL Server 2014 y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

table_name

Nombre de la tabla para la que se va a comprobar el valor de identidad actual. La tabla especificada debe contener una columna de identidad. Los nombres de las tablas deben seguir las reglas de los identificadores. Deben delimitarse nombres de dos o tres partes, como Person.AddressType o [Person].[AddressType].

NORESEED

Especifica que el valor de identidad actual no se debe cambiar.

RESEED

Especifica que el valor de identidad actual se debería cambiar.

new_reseed_value

Nuevo valor que se va a usar como valor de identidad actual de la columna de identidad.

WITH NO_INFOMSGS

Suprime todos los mensajes de información.

Observaciones

Las correcciones concretas realizadas en el valor de identidad actual dependen de las especificaciones de los parámetros.

Comando DBCC CHECKIDENT Corrección o correcciones de identidad realizadas
DBCC CHECKIDENT (<table_name>, NORESEED) No se restablece el valor de identidad actual. DBCC CHECKIDENT devuelve el valor de identidad actual y el valor máximo actual de la columna de identidad. Si los dos valores no coinciden, debe restablecer el valor de identidad para evitar posibles errores o espacios en la secuencia de valores.
DBCC CHECKIDENT (<table_name>)

or

DBCC CHECKIDENT (<table_name>, RESEED)
Si el valor de identidad actual de una tabla es menor que el valor de identidad máximo almacenado en la columna de identidad, se restablece con el valor máximo de la columna de identidad. Vea la sección Excepciones que aparece más adelante.
DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) El valor de identidad actual se establece en new_reseed_value. Si no se han insertado filas en la tabla desde su creación, o su todas las filas se han quitado con la instrucción TRUNCATE TABLE, la primera fila insertada después de ejecutar DBCC CHECKIDENT utiliza new_reseed_value como identidad. Si hay filas en la tabla, o bien si todas las filas se han quitado mediante la instrucción DELETE, la siguiente fila insertada usa el valor new_reseed_value y el valor del incremento actual. Si una transacción inserta una fila y posteriormente se revierte, la siguiente fila insertada usa new_reseed_value más el valor de incremento actual como si se hubiera eliminado la fila. Si la tabla no está vacía y se establece el valor de identidad en un número menor que el valor máximo de la columna de identidad, puede darse una de las siguientes condiciones:

- Si existe una restricción PRIMARY KEY o UNIQUE en la columna de identidad, se generará el mensaje de error 2627 en las operaciones de inserción en la tabla posteriores, ya que el valor de identidad generado provocará un conflicto con los valores existentes.

- Si no existe una restricción PRIMARY KEY o UNIQUE, las operaciones de inserción posteriores provocarán la duplicación de los valores de identidad.

Excepciones

En la tabla siguiente se muestran condiciones en las que DBCC CHECKIDENT no restablece automáticamente el valor de identidad actual y se proporcionan métodos para restablecer el valor.

Condición Métodos para restablecer
El valor de identidad actual es mayor que el valor máximo de la tabla. Ejecute DBCC CHECKIDENT (<table_name>, NORESEED) para determinar el valor máximo actual de la columna. A continuación, especifique ese valor como new_reseed_value en un comando DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>).

or

Ejecute DBCC CHECKIDENT (<table_name>, RESEED,<new_reseed_value>) con new_reseed_value establecido en un valor bajo y, a continuación, ejecute DBCC CHECKIDENT (<table_name>, RESEED) para corregir el valor.
Se eliminan todas las filas de la tabla. Ejecute DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) con new_reseed_value establecido en el nuevo valor inicial.

Cambio del valor de inicialización

El valor de inicialización es el valor insertado en una columna de identidad para la primera fila cargada en la tabla. Todas las filas subsiguientes contienen el valor de identidad actual más el valor de incremento, donde el valor de identidad actual es el último valor de identidad generado para la tabla o vista.

DBCC CHECKIDENT no se puede para las siguientes tareas:

  • Cambiar el valor de inicialización original especificado para una columna de identidad cuando se creó la tabla o la vista.

  • Reinicializar las filas existentes de una tabla o vista.

Para cambiar el valor de inicialización original y reinicializar cualquier fila existente, quite la columna de identidad y vuelva a crearla mediante la especificación del nuevo valor de inicialización. Cuando la tabla contiene datos, los números de identidad se agregan a las filas existentes con los valores de inicialización e incremento especificados. No se garantiza el orden en que las filas se actualizan.

Conjuntos de resultados

Tanto si especifica una opción para una tabla que contiene una columna de identidad como si no, DBCC CHECKIDENT devuelve el siguiente mensaje para todas las operaciones excepto una. Esa operación es especificar un nuevo valor de inicialización.

Comprobación de información de identidad: valor de identidad actual "<valor de identidad actual>", valor de columna actual "<valor de columna actual>". Ejecución de DBCC completada. Si DBCC imprime algún mensaje de error, póngase en contacto con el administrador del sistema.

Cuando DBCC CHECKIDENT se utiliza para especificar un nuevo valor de inicialización mediante RESEED <new_reseed_value>, se devuelve el mensaje siguiente.

Comprobación de información de identidad: valor de identidad actual "<valor de identidad actual>". Ejecución de DBCC completada. Si DBCC imprime algún mensaje de error, póngase en contacto con el administrador del sistema.

Permisos

El autor de la llamada debe ser el propietario del esquema que contiene la tabla, o bien ser miembro del rol fijo de servidor sysadmin, el rol fijo de base de datos db_owner o el rol fijo de base de datos db_ddladmin.

Azure Synapse Analytics requiere permisos de db_owner.

Ejemplos

A. Restablecer el valor de identidad actual si es necesario

En el ejemplo siguiente, se restablece el valor de identidad actual, si es necesario, de la tabla especificada en la base de datos AdventureWorks2022.

USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO

B. Notificar el valor de identidad actual

En el ejemplo siguiente se notifica el valor de identidad actual de la tabla especificada en la base de datos AdventureWorks2022, y no se corrige el valor de identidad si es incorrecto.

USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', NORESEED);
GO

C. Hacer que el valor de identidad actual sea un nuevo valor

En el ejemplo siguiente, el valor de identidad actual de la columna AddressTypeID de la tabla AddressType se establece en el valor 10. Dado que la tabla tiene filas existentes, la siguiente fila insertada usará 11 como valor. El nuevo valor de identidad actual definido para la columna más 1 (que es el valor de incremento de la columna).

USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO

D. Restablecer el valor de identidad en una tabla vacía

En el ejemplo siguiente se asume una entidad de tabla de ErrorLog y se obliga a que el valor de identidad actual de la columna (1, 1) de la tabla ErrorLogID se establezca en el valor 1 después de eliminar todos los registros de la tabla. Puesto que la tabla no tiene ninguna fila, la siguiente fila insertada usará 1 como el valor, es decir, el nuevo valor de identidad actual, sin añadir el valor de incremento definido para la columna después de TRUNCATE ni agregar el valor de incremento después de DELETE.

USE AdventureWorks2022;
GO
TRUNCATE TABLE dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 1);
GO
DELETE FROM dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 0);
GO

Consulte también