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