viernes, 24 de julio de 2015

Como violar un autonumerico en MS SQL

Supongamos que tienes una tabla de usuarios cuyo identificador es un autonumerico. Pero te entregan una lista para cargar donde los usuarios tienen un numero como identificador pero no parten del 1 y hay usuarios que no existen por ejemplo (1,2,7,8,9, etc).  Y otra condición es que después de la carga inicial, se debe seguir usando el autonumerico para la asignación de códigos partiendo de n numero.

En esos casos se pueden usar la instrucciones:
SET IDENTITY_INSERT y DBCC CHECKIDENT

SET IDENTITY_INSERT
Permite insertar valores explícitos en la columna identidad de una tabla.

DBCC CHECKIDENT
Comprueba el valor de identidad actual de la tabla especificada, si fuera necesario, lo cambia. También puede utilizar DBCC CHECKIDENT para establecer manualmente un nuevo valor de identidad actual para la columna de identidad.

Sintaxis SET IDENTITY_INSERT
SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }


Donde
  • database_name : nombre de la base de datos
  • schema_name : nombre del esquema
  • table  : nombre de la tabla


Ejemplo de uso
SET IDENTITY_INSERT [dbo].[Tu_tabla] ON
INSERT INTO Tu_tabla (3,...)
SET IDENTITY_INSERT [dbo].[Tu_tabla] OFF

La segunda parte del requerimiento de dejar establecido desde que numero se generaran los autonumerico se puede hacer con la instruccion: DBCC CHECKIDENT

Sintaxis
DBCC CHECKIDENT  (table_name [, { NORESEED | { RESEED [, new_reseed_value]}}])
[ WITH NO_INFOMSGS ]

Donde
  • table_name : nombre de la tabla
  • 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.
Ejemplo de Uso:

Para saber el valor identidad
DBCC CHECKIDENT ('Usuario', NORESEED)

Para poner como valor de identidad de la tabla Usuario el 100
DBCC CHECKIDENT ('Usuario',reseed,100)


Mas Información:
https://msdn.microsoft.com/es-es/library/ms188059%28v=sql.120%29.aspx
https://msdn.microsoft.com/es-es/library/ms176057(v=sql.120).aspx

No hay comentarios: