2016/07/01

MODIFICANDO LA NUMERACION DE UN IDENTITY

PROBLEMA: En los foros de MSDN, muchas personas se preguntan como modificar el siguiente número que utilizará la propiedad IDENTITY al momento de realizar una inserción.

SOLUCION: Utilizando la sentencia DBCC CHECKIDENT podemos resolver esto de la siguiente manera.


Primero crearemos una tabla con algunos datos de prueba:
IF OBJECT_ID( 'dbo.tablaPruebasIdentity' ) IS NOT NULL
 DROP TABLE dbo.tablaPruebasIdentity; 

CREATE TABLE dbo.tablaPruebasIdentity( 
 columnaID SMALLINT IDENTITY( 1,1 ) 
 , descripcion VARCHAR(100) 
); 

INSERT INTO dbo.tablaPruebasIdentity( descripcion ) 
VALUES( 'uno' ) , ('dos'), ('tres'), ('cuatro') ;  
Ahora bien, podemos revisar cual es el último valor para nuestra columna con la propiedad IDENTITY de la siguiente manera:
DBCC CHECKIDENT('dbo.tablaPruebasIdentity', NORESEED )
Ejecutemos la siguiente instrucción para modificar el siguiente valor para nuestra columna IDENTITY
DBCC CHECKIDENT( 'dbo.tablaPruebasIdentity' , RESEED, 10 ); 
De esta manera podemos observar que el valor actual para la propiedad IDENTITY ( no es el ultimo valor que se encuentra en la columna) es de 10, lo que quiere decir que el siguiente valor para la columna será 11, ejecutemos nuevamente: 
DBCC CHECKIDENT('dbo.tablaPruebasIdentity', NORESEED )
El valor para la propiedad IDENTITY ya cambió, sin embargo no quiere decir que sea el ultimo IDENTITY ingresado en la columna que es de 4, ahora insertemos nuevamente algunos datos y revisemos el contenido de la tabla:
INSERT INTO dbo.tablaPruebasIdentity( descripcion ) 
VALUES( 'once' ) , ('doce'),('trece') ; 

SELECT * FROM dbo.tablaPruebasIdentity; 

Ejecutemos nuevamente la sentencia de verificación de IDENTITY: 
DBCC CHECKIDENT('dbo.tablaPruebasIdentity', NORESEED );
Los valores han cambiado nuevamente, ahora regresemos el valor de la columna IDENTITY para que inserte el número 5 y consultamos la propiedad nuevamente: 
DBCC CHECKIDENT( 'dbo.tablaPruebasIdentity' , RESEED, 4 ); 
DBCC CHECKIDENT('dbo.tablaPruebasIdentity', NORESEED ); 

Y una vez más insertemos algunos datos para verificar el contenido de la tabla: 
INSERT INTO dbo.tablaPruebasIdentity( descripcion ) 
VALUES( 'cinco' ) , ('seis'); 

SELECT * FROM dbo.tablaPruebasIdentity; 

Revisamos la propiedad IDENTITY
DBCC CHECKIDENT('dbo.tablaPruebasIdentity', NORESEED );
El primer valor subrayado con rojo recordemos que es el ultimo valor ingresado en cualquier operación por lo que el siguiente número que fuera ingresado ocupará el valor de 7, y el segundo valor subrayado es el valor más alto ingresado. Pero que pasaría si nosotros seguimos insertando valores hasta alcanzar el número 11, que pasará? Lo saltará automáticamente? La respuesta es NO, veamos:
INSERT INTO dbo.tablaPruebasIdentity( descripcion ) 
VALUES( 'siete' ) , ('ocho'), ( 'nueve' ) ,('diez'), ( 'once' ), ('doce');

SELECT * FROM dbo.tablaPruebasIdentity; 

Por última vez revisemos cual será el siguiente valor que se insertará:
DBCC CHECKIDENT('dbo.tablaPruebasIdentity', NORESEED );
Con esta información, ya podrán reiniciar o establecer el siguiente número en la columna que contenga dicha propiedad IDENTITY, podrán repetir los números siempre y cuando su columna no sea parte de la llave primaria.

SALUDOS!
COMPARTE ESTA INFORMACION SI TE PARECIO INTERESANTE

0 comentarios:

Publicar un comentario