lunes, 18 de enero de 2010

Reiniciar un campo IDENTITY

¿Como reiniciar un campo IDENTITY en transact-sql?

Lo hacemos con la siguiente sentencia :

DBCC
CHECKIDENT ('dbo.articulos', RESEED,0)

A continuacion la información textual como aparece en el MSDN:

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 losidentificadores.

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 usar como valor de identidad actual de la columna de identidad.

WITH NO_INFOMSGS

Suprime todos los mensajes de información.


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 si 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.