Social Icons

twitter facebook google plus linkedin

lunes, 1 de octubre de 2012

Manipular un identity de una columna con dbcc checkident

En este artículo chiquitito les contaré como manipular el valor de un campo con identity.

Hay una instrucción en T-SQL que se llama dbcc checkident  que sirve para manipular campos con identity, entre otras cosas, puede servir para resetear el contador (de una forma parecida que truncate, pero sin borrar datos).

Para este ejemplo, crearemos una tabla:


CREATE TABLE MiTable
(
id INT IDENTITY(1,1) NOT NULL,
fecha DATETIME NOT NULL
)


E insertaremos 3 valores

INSERT INTO MiTabla (fecha) VALUES (GETDATE())
INSERT INTO MiTabla (fecha) VALUES (GETDATE())
INSERT INTO MiTabla (fecha) VALUES (GETDATE())


Chequearemos con dbcc checkident el ultimo valor generado:
dbcc checkident('MiTabla',NORESEED)
Y debiera entregar algo más o menos así:



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


Bien, sabemos el último elemento insertado es el 3 y el próximo será el 4. ¿Cómo lo hacemos para que el próximo elemento sea el 20? Fácil:
dbcc checkident('MiTabla',RESEED,19)
Debiera decir algo así:



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



Ahora insertemos un valor más:
INSERT INTO MiTabla (fecha) VALUES (GETDATE())
Y consultamos por el ultimo valor:
SELECT TOP 1 * FROM MiTabla ORDER BY id DESC
Vemos que el id es 20.

Tomen nota que se toma el numero anterior al valor que queremos que se genere cuando se indica con dbcc checkident.

También funciona con valores negativos:
dbcc checkident('MiTabla',RESEED,-19)
Ahora insertemos un valor más:
INSERT INTO MiTabla (fecha) VALUES (GETDATE())
Y consultamos por el ultimo valor:
SELECT TOP 1 * FROM MiTabla ORDER BY id ASC
Vemos que el id es -18.

¡Chau!