DBCC CHECKIDENT (Transact-SQL)DBCC CHECKIDENT (Transact-SQL)

SE APLICA A: síSQL Server síAzure SQL Database síAzure Synapse Analytics (SQL DW) noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Comprueba el valor de identidad actual de la tabla especificada en SQL ServerSQL Server y, si fuera necesario, lo cambia.Checks the current identity value for the specified table in SQL ServerSQL Server and, if it's needed, changes the identity value. También puede utilizar DBCC CHECKIDENT para establecer manualmente un nuevo valor de identidad actual para la columna de identidad.You can also use DBCC CHECKIDENT to manually set a new current identity value for the identity column.

Icono de vínculo de artículo Convenciones de sintaxis de Transact-SQLArticle link icon Transact-SQL Syntax Conventions

SintaxisSyntax


-- Syntax for SQL Server and Azure SQL Database  

DBCC CHECKIDENT
 (
    table_name  
        [, { NORESEED | { RESEED [, new_reseed_value ] } } ]  
)  
[ WITH NO_INFOMSGS ]  
-- Syntax for Azure SQL Data Warehouse
DBCC CHECKIDENT   
 (   
    table_name  
        [RESEED, new_reseed_value ]   
)  
[ WITH NO_INFOMSGS ]  

ArgumentosArguments

table_nametable_name
Es el nombre de la tabla para la que se va a comprobar el valor de identidad actual.Is the name of the table for which to check the current identity value. La tabla especificada debe contener una columna de identidad.The table specified must contain an identity column. Los nombres de las tablas deben seguir las reglas de los identificadores.Table names must follow the rules for identifiers. Se deben delimitar dos o tres nombres de partes, como "Person.AddressType" o [Person.AddressType].Two or three part names must be delimited, such as 'Person.AddressType' or [Person.AddressType].

NORESEEDNORESEED
Especifica que el valor de identidad actual no se debe cambiar.Specifies that the current identity value shouldn't be changed.

RESEEDRESEED
Especifica que el valor de identidad actual se debería cambiar.Specifies that the current identity value should be changed.

new_reseed_valuenew_reseed_value
Es el nuevo valor que se va a usar como valor de identidad actual de la columna de identidad.Is the new value to use as the current value of the identity column.

WITH NO_INFOMSGSWITH NO_INFOMSGS
Suprime todos los mensajes de información.Suppresses all informational messages.

NotasRemarks

Las correcciones concretas realizadas en el valor de identidad actual dependen de las especificaciones de los parámetros.The specific corrections made to the current identity value depend on the parameter specifications.

Comando DBCC CHECKIDENTDBCC CHECKIDENT command Corrección o correcciones de identidad realizadasIdentity correction or corrections made
DBCC CHECKIDENT ( table_name, NORESEED )DBCC CHECKIDENT ( table_name, NORESEED ) No se restablece el valor de identidad actual.Current identity value is not reset. DBCC CHECKIDENT devuelve el valor de identidad actual y el valor máximo actual de la columna de identidad.DBCC CHECKIDENT returns the current identity value and the current maximum value of the identity column. Si los dos valores no coinciden, debe restablecer el valor de identidad para evitar posibles errores o espacios en la secuencia de valores.If the two values are not the same, you should reset the identity value to avoid potential errors or gaps in the sequence of values.
DBCC CHECKIDENT ( table_name )DBCC CHECKIDENT ( table_name )

o Administrador de configuración deor

DBCC CHECKIDENT ( table_name, RESEED )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.If the current identity value for a table is less than the maximum identity value stored in the identity column, it is reset using the maximum value in the identity column. Vea la sección "Excepciones" que aparece más adelante.See the 'Exceptions' section that follows.
DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value ) El valor de identidad actual se establece en new_reseed_value.Current identity value is set to the new_reseed_value. Si no se han insertado filas en la tabla desde su creación, o si todas las filas se han quitado con la instrucción TRUNCATE TABLE, la primera fila insertada después de ejecutar DBCC CHECKIDENT usa new_reseed_value como identidad.If no rows have been inserted into the table since the table was created, or if all rows have been removed by using the TRUNCATE TABLE statement, the first row inserted after you run DBCC CHECKIDENT uses new_reseed_value as the identity. 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.If rows are present in the table, or if all rows have been removed by using the DELETE statement, the next row inserted uses new_reseed_value + the current increment value. 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.If a transaction inserts a row and is later rolled back, the next row inserted uses new_reseed_value + the current increment value as if the row had been deleted. 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:If the table is not empty, setting the identity value to a number less than the maximum value in the identity column can result in one of the following conditions:

- 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.-If a PRIMARY KEY or UNIQUE constraint exists on the identity column, error message 2627 will be generated on later insert operations into the table because the generated identity value will conflict with existing values.

- 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.-If a PRIMARY KEY or UNIQUE constraint does not exist, later insert operations will result in duplicate identity values.

ExcepcionesExceptions

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.The following table lists conditions when DBCC CHECKIDENT doesn't automatically reset the current identity value, and provides methods for resetting the value.

CondiciónCondition Métodos para restablecerReset methods
El valor de identidad actual es mayor que el valor máximo de la tabla.The current identity value is larger than the maximum value in the table. Ejecute DBCC CHECKIDENT (table_name, NORESEED) para determinar el valor máximo actual de la columna.Execute DBCC CHECKIDENT (table_name, NORESEED) to determine the current maximum value in the column. A continuación, especifique ese valor como new_reseed_value en un comando DBCC CHECKIDENT (table_name, RESEED,new_reseed_value).Next, specify that value as the new_reseed_value in a DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) command.

-O bien--OR-

Ejecute DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) con new_reseed_value establecido en un valor muy bajo y, luego, ejecute DBCC CHECKIDENT (table_name, RESEED) para corregir el valor.Execute DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) with new_reseed_value set to a very low value, and then run DBCC CHECKIDENT (table_name, RESEED) to correct the value.
Se eliminan todas las filas de la tabla.All rows are deleted from the table. Ejecute DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) con new_reseed_value establecido en el valor de inicio deseado.Execute DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) with new_reseed_value set to the new starting value.

Cambiar el valor de inicializaciónChanging the Seed Value

El valor de inicialización es el valor insertado en una columna de identidad para la primera fila cargada en la tabla.The seed value is the value inserted into an identity column for the first row loaded into the table. 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.All subsequent rows contain the current identity value plus the increment value where current identity value is the last identity value generated for the table or view.

No se puede usar DBCC CHECKIDENT en las siguientes tareas:You can't use DBCC CHECKIDENT for the following tasks:

  • Cambiar el valor de inicialización original especificado para una columna de identidad cuando se creó la tabla o la vista.Change the original seed value specified for an identity column when the table or view was created.

  • Reinicializar las filas existentes de una tabla o vista.Reseed existing rows in a table or view.

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.To change the original seed value and reseed any existing rows, drop the identity column and recreate it specifying the new seed value. 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.When the table contains data, the identity numbers are added to the existing rows with the specified seed and increment values. No se garantiza el orden en que las filas se actualizan.The order in which the rows are updated isn't guaranteed.

Conjuntos de resultadosResult Sets

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.Whether or not you specify any options for a table that contains an identity column, DBCC CHECKIDENT returns the following message for all operations except one. Esa operación es especificar un nuevo valor de inicialización.That operation is specifying a new seed value.

Checking identity information: current identity value '\<current identity value>', current column value '\<current column value>'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Cuando DBCC CHECKIDENT se usa para especificar un nuevo valor de inicialización mediante RESEED new_reseed_value, se devuelve el mensaje siguiente.When DBCC CHECKIDENT is used to specify a new seed value by using RESEED new_reseed_value, the following message is returned.

Checking identity information: current identity value '\<current identity value>'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.

PermisosPermissions

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.Caller must own the schema that contains the table, or be a member of the sysadmin fixed server role, the db_owner fixed database role, or the db_ddladmin fixed database role.

Azure SQL Data Warehouse requiere permisos de db_owner.Azure SQL Data Warehouse requires db_owner permissions.

EjemplosExamples

A.A. Restablecer el valor de identidad actual si es necesarioResetting the current identity value, if it's needed

En el ejemplo siguiente, se restablece el valor de identidad actual, si es necesario, de la tabla especificada en la base de datos AdventureWorks2012AdventureWorks2012.The following example resets the current identity value, if it's needed, of the specified table in the AdventureWorks2012AdventureWorks2012 database.

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

B.B. Informar del valor de identidad actualReporting the current identity value

En el ejemplo siguiente se notifica el valor de identidad actual de la tabla especificada en la base de datos AdventureWorks2012AdventureWorks2012, y no se corrige el valor de identidad si es incorrecto.The following example reports the current identity value in the specified table in the AdventureWorks2012AdventureWorks2012 database, and doesn't correct the identity value if it's incorrect.

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

C.C. Hacer que el valor de identidad actual sea un nuevo valorForcing the current identity value to a new value

En el ejemplo siguiente, el valor de identidad actual de la columna AddressTypeID de la tabla AddressType se establece en el valor 10.The following example forces the current identity value in the AddressTypeID column in the AddressType table to a value of 10. Dado que la tabla ya contiene filas, la fila siguiente que se inserte usará el valor 11; es decir, el valor de identidad actual definido para la columna más 1 (que es el valor de incremento de la columna).Because the table has existing rows, the next row inserted will use 11 as the value – the new current identity value defined for the column plus 1 (which is the column's increment value).

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

D.D. Restablecer el valor de identidad en una tabla vacíaResetting the identity value on an empty table

En el ejemplo siguiente, el valor de identidad actual de la columna ErrorLogID de la tabla ErrorLog se establece en el valor 1 después de eliminar todos los registros de la tabla.The following example forces the current identity value in the ErrorLogID column in the ErrorLog table to a value of 1, after deleting all records from table. 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.Because the table has no existing rows, the next row inserted will use 1 as the value, that is, the new current identity value, without adding the increment value defined for the column.

USE AdventureWorks2012;  
GO  
TRUNCATE TABLE dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 1);  
GO  

Consulte tambiénSee Also

ALTER TABLE (Transact-SQL)ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)CREATE TABLE (Transact-SQL)
DBCC (Transact-SQL)DBCC (Transact-SQL)
IDENTITY (propiedad de Transact-SQL)IDENTITY (Property) (Transact-SQL)
Replicar columnas de identidadReplicate Identity Columns
USE (Transact-SQL)USE (Transact-SQL)
IDENT_SEED (Transact-SQL)IDENT_SEED (Transact-SQL)
IDENT_INCR (Transact-SQL)IDENT_INCR (Transact-SQL)