martes, 22 de julio de 2014

SQL Server: Resetear valor en columna Identity

En ciertas ocasiones nos puede interesar resetear el valor de una columna identity, por ejemplo, si estamos trabajando en un entorno de preproducción y estamos haciendo pruebas de cargas; tras hacer una inserción de N filas las podemos eliminar pero nos interesaría también resetear el valor de la columna identity. La instrucción DBCC CHECKIDENT nos permite resetear el valor de una columna identity, veamos algunos ejemplos:

-- La siguiente instrucción nos devuelve el valor de la columna identity de la tabla indicada
DBCC CHECKIDENT ('TableName', NORESEED)

-- Devolverá el mensaje siguiente donde 'n' es el valor actual del identity:
-- Comprobación de información de identidad: valor de identidad actual 'n', 
-- valor de columna actual 'n'.
-- Ejecución de DBCC completada. Si hay mensajes de error, consulte al administrador del sistema.

-- Si queremos que en el próximo INSERT el valor de la columna identity sea 1 utilizaremos:
DBCC CHECKIDENT ('TableName', RESEED, 0)

-- En general si queremos que en el próximo INSERT el valor de la columna identity sea n 
-- utilizaremos la instrucción:
DBCC CHECKIDENT ('TableName', RESEED, n-1)

Es importante el utilizar ' ' (comillas simples) en el parámetro TableName; si simplemente especificamos el nombre de la tabla no habrá problemas aunque no usemos las comillas simples pero si trabajamos con esquemas o referenciamos una base de datos es obligatorio el uso de ellas, veamos algunos ejemplos:

-- Esta instrucción se ejecutaría sin problemas
DBCC CHECKIDENT (Tablename, NORESEED)

-- Esta instrucción dará el error:
-- Sintaxis incorrecta cerca de '.'.
DBCC CHECKIDENT (DatabaseName.dbo.TableName, NORESEED)

-- La correcta sería
DBCC CHECKIDENT ('DatabaseName.dbo.TableName', NORESEED)

-- También daría el mismo error
DBCC CHECKIDENT (SchemaName.TableName, NORESEED)

-- La correcta sería
DBCC CHECKIDENT ('SchemaName.TableName', NORESEED)

Y hasta aquí el artículo de hoy, breve pero espero que útil; recordad que dentro de areaTIC podéis encontrar otros artículos interesantes, no dudéis en consultar nuestro archivo, también podéis seguirnos por RSS o las principales redes sociales (twitter, facebook, linkedin...).


LECTURAS RELACIONADAS RECOMENDADAS POR AREATIC.NET