Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Base de datos de Azure SQL en Microsoft Fabric
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.
Este artículo y la IDENTITY sintaxis varían según las plataformas del SQL Motor de base de datos. Para Microsoft Fabric Data Warehouse, selecciona Fabric Data Warehouse en la lista desplegable de versiones.
Convenciones de sintaxis de Transact-SQL
Sintaxis
Sintaxis para SQL Server, Azure SQL Database, Azure SQL Managed Instance, base de datos SQL en Fabric:
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 ]
Argumentos
table_name
Nombre de la tabla para la que se va a comprobar el valor de identidad actual. La tabla que especifique debe contener una columna de identidad. Los nombres de las tablas deben seguir las reglas de los identificadores. Utiliza delimitadores para 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.
CON NO_INFOMSGS
Suprime todos los mensajes de información.
Observaciones
Las correcciones específicas que DBCC CHECKIDENT se realizan al 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 son iguales, restablece el valor identidad para evitar posibles errores o lagunas 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 máximo de identidad almacenado en la columna de identidad, DBCC CHECKIDENT se reinicia usando el valor máximo en la columna 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 insertan filas en la tabla desde que se creó, o si todas las filas se eliminan usando la TRUNCATE TABLE sentencia, la primera fila insertada tras ejecutar DBCC CHECKIDENT se usa new_reseed_value como identidad. Si hay filas presentes en la tabla, o si todas se eliminan usando la DELETE sentencia, la siguiente fila insertada usa new_reseed_value + el valor actual de incremento . Si una transacción inserta una fila y luego se revierte, la siguiente fila insertada usa new_reseed_value + el valor actual de incremento como si la fila hubiera sido eliminada. 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 PRIMARY KEY restricción a UNIQUE en la columna identidad, se genera el mensaje de error 2627 en operaciones posteriores de inserción en la tabla porque el valor identidad generado entra en conflicto con los valores existentes.- Si no existe una PRIMARY KEY restricción or UNIQUE , las operaciones de inserción posteriores resultan en valores de identidad duplicados. |
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
El siguiente ejemplo restablece el valor de identidad actual, si es necesario, para la tabla especificada en la base de datos.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO
B. Notificar el valor de identidad actual
El siguiente ejemplo informa del valor de identidad actual para la tabla especificada en la base de datos y no 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
El siguiente ejemplo fuerza el valor de identidad actual de la AddressTypeID columna de la AddressType tabla a un valor de 10. Como la tabla tiene filas existentes, la siguiente fila insertada usa el 11 como valor. El nuevo valor de identidad actual definido para la columna más 1 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
El siguiente ejemplo asume una identidad de tabla y (1, 1) fuerza el valor de identidad actual de la ErrorLogID columna en la ErrorLog tabla a un valor de 1, tras eliminar todos los registros de la tabla. Como la tabla no tiene filas existentes, la siguiente fila insertada usa 1 como valor. El nuevo valor de identidad actual sin añadir el valor de incremento definido para la columna después de TRUNCATE, ni añadir el valor de incremento después DELETEde .
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
Contenido relacionado
Se aplica a:Warehouse en Microsoft Fabric
Resembra el valor identidad de una tabla en Fabric Data Warehouse. Úsalos DBCC CHECKIDENT después de insertar valores explícitos con SET IDENTITY_INSERT para realinear rangos de identidad y evitar conflictos con futuros valores generados automáticamente.
Este artículo y la IDENTITY sintaxis varían según las plataformas del SQL Motor de base de datos.
Convenciones de sintaxis de Transact-SQL
Sintaxis
DBCC CHECKIDENT ( 'table_name' [ , RESEED ] )
Argumentos
table_name
El nombre de la tabla para la cual se debe reiniciar el valor de identidad. La tabla debe contener una columna de identidad. Los nombres de las tablas pueden incluir el nombre del esquema, como 'dbo.DimCustomer' o '[dbo].[DimCustomer]'.
RESEED
La RESEED palabra clave es opcional, pero DBCC CHECKIDENT siempre realiza la operación de reseed. Incluir la opción o omitirla produce los mismos resultados.
La RESEED palabra clave indica al Motor de base de datos que escanee todos los rangos de identidad usados y reservados y establezca el siguiente valor de identidad para evitar conflictos con valores existentes. En Fabric Data Warehouse, RESEED realiza un escaneo consciente del rango en todos los nodos de cómputo distribuidos para determinar el siguiente valor correcto.
Observaciones
- En Fabric Data Warehouse, el único argumento que
DBCC CHECKIDENTapoya es laRESEEDopción, que siempre cumple. El sistema determina automáticamente los siguientes rangos correctos de valor de identidad basándose en los datos existentes. No puedes especificar un valor de reseed personalizado. - Siempre ejecuta
DBCC CHECKIDENTdespués de usarIDENTITY_INSERTpara insertar valores explícitos. Esta operación asegura que los valores generados automáticamente en el futuro no colisionen con los valores insertados manualmente. - En Fabric Data Warehouse, no se permite especificar una personalización
new_reseed_value. Intentar proporcionar un valor devuelve el siguiente error:Specifying a custom seed in Fabric Data Warehouse is not supported. -
DBCC CHECKIDENTadquiere bloqueos que pueden bloquear operaciones DML y DDL concurrentes. Para minimizar las interrupciones, ejecuta el comando de forma aislada cuando otros procesos no estén usando activamente la tabla.
Permisos
Debes ser dueño de la mesa o tener ALTER permiso para que la ponga.
Ejemplos
A. Resembra después de insertar valores centinela
Después de repoblar los valores centinela en una tabla de dimensiones con SET IDENTITY_INSERT, reinicia la columna identidad para evitar que futuros valores generados automáticamente colisionen con los valores insertados manualmente.
-- Insert sentinel values
SET IDENTITY_INSERT dbo.DimCustomer ON;
INSERT INTO dbo.DimCustomer (CustomerKey, CustomerName)
VALUES (-1, 'Unknown'),
(-2, 'Not Applicable');
SET IDENTITY_INSERT dbo.DimCustomer OFF;
-- Reseed to realign future identity values
DBCC CHECKIDENT('dbo.DimCustomer', RESEED);
B. Resiembra tras la migración masiva
Después de migrar datos históricos con valores de identidad explícitos, vuelve a sembrar la tabla para asegurarte de que las nuevas filas reciban valores que no se solapen con los datos migrados.
-- After migrating data with IDENTITY_INSERT
DBCC CHECKIDENT('dbo.DimProduct', RESEED);
-- Future inserts receive auto-generated values beyond the migrated range
INSERT INTO dbo.DimProduct (ProductName, Category)
VALUES ('New Widget', 'Hardware');
C. Resembrar después de COPIAR EN con IDENTITY_INSERT
Después de cargar datos con COPY INTO mientras IDENTITY_INSERT es ON, vuelve a sembrar la columna de identidad.
COPY INTO las opciones anulan cualquier configuración a nivel de sesión para IDENTITY_INSERT.
COPY INTO dbo.DimStore (StoreKey 1, StoreName 2, Region 3)
FROM 'https://storage.blob.core.windows.net/migration/dimstore.csv'
WITH (
FILE_TYPE = 'CSV',
IDENTITY_INSERT = 'ON'
);
-- Reseed after bulk load
DBCC CHECKIDENT('dbo.DimStore', RESEED);
D. Reseed sin la palabra clave RESEED
La RESEED palabra clave es opcional, pero DBCC CHECKIDENT siempre realiza la operación de reseed. Incluir la opción o omitirla produce los mismos resultados.
-- Reseed without the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore');
-- Reseed with the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore', RESEED);