DBCC CHECKIDENT (Transact-SQL)

Actualizado: 17 de noviembre de 2008

Comprueba el valor de identidad actual de la tabla especificada 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.

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL


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

table_name

Es el 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 tabla deben cumplir las reglas de los identificadores.

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

Es el nuevo valor que se va a utilizar como valor actual de la columna de identidad.

WITH NO_INFOMSGS

Suprime todos los mensajes de información.

Se especifiquen o no opciones para una tabla que contiene una columna de identidad, DBCC CHECKIDENT devuelve los valores siguientes (estos valores pueden variar):

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

Cambiar el valor de inicialización

Se trata del valor que se inserta 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. El valor de identidad actual es el último valor de identidad generado para la tabla o vista. Para obtener más información, vea Crear y modificar columnas de identificadores.

No puede usar instrucciones DBCC CHECKIDENT para realizar las tareas siguientes:

  • Cambiar el valor de identidad original que se especificó para una columna de identidad cuando se creó la tabla o la vista.
  • Volver a inicializar las filas existentes de una tabla o vista.

Para cambiar el valor de inicialización original y volver a inicializar las filas existentes, debe quitar la columna de identidad y volver a crearla especificando el valor de inicialización nuevo. 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.

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 )

o bien

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.

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 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. De lo contrario, la siguiente fila insertada utiliza new_reseed_value + el valor de incremento actual.

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 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 y, a continuación, especifíquelo como new_reseed_value en un comando DBCC CHECKIDENT (table_name, RESEED, new_reseed_value).

o bien

  • Ejecute DBCC CHECKIDENT (table_name, RESEED, new_reseed_value) con new_reseed_value establecido en un valor muy 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 valor de inicio que desee.

El autor de la llamada debe ser el propietario de la tabla o un miembro de la función fija de servidor sysadmin, de la función fija de base de datos db_owner o la de función fija de base de datos db_ddladmin.

A. Restablecer el valor de identidad actual si es necesario

En el ejemplo siguiente, si es necesario, se restablece el valor de identidad actual de la tabla Employee de la base de datos AdventureWorks.

USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee");
GO

B. Notificar el valor de identidad actual

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

USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee", NORESEED);
GO

C. Hacer que el valor de identidad actual sea 30

En el ejemplo siguiente se hace que el valor de identidad actual de la columna EmployeeID de la tabla Employee se establezca en 300. Dado que la tabla tiene filas, la siguiente fila insertada utilizará 301 como valor, es decir, el valor de identidad actual más 1, el valor de incremento actual definido para la columna.

USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee", RESEED, 30);
GO

Versión Historial

17 de noviembre de 2008

Contenido modificado:
  • Se corrigió la definición de new_reseed_value.
  • Se agregó una sección sobre cómo cambiar el valor de inicialización en Notas.

14 de abril de 2006

Contenido nuevo:
  • Se agregó un comentario acerca de los resultados que se derivan de establecer un valor de identidad en un número menor que el valor máximo de la columna de identidad.
  • Se agregó texto a la sección Excepciones para el caso en que se eliminen todas las filas de la tabla.

5 de diciembre de 2005

Contenido nuevo:
  • Se agregó texto a la descripción del argumento new_reseed_value.

Adiciones de comunidad

AGREGAR
Mostrar: