¿Cómo insertar un valor explicito en una columna IDENTITY?

Una columna del tipo IDENTITY no puede recibir un valor explícito, ya que es el motor el que se encarga de completarlo, en este caso con un numérico incremental.

La forma normal de hacer un INSERT, dónde dejamos que el motor complete este dato es quitar la columna de la sentencia, por ejemplo:

INSERT INTO TiposComprobantes (Nombre) VALUES ('Factura A');

Sin embargo, aún siendo un IDENTITY puede que necesitemos insertar un valor explícito, por ejemplo en un sistema heredado, tal vez el ID ya se encuentre referenciado en otras tablas y debamos mantener esta consistencia. En estos casos podemos “deshabilitar” el comportamiento por defecto del IDENTITY, mediante la clausula SET IDENTITY_INSERT, por ejemplo:

SET IDENTITY_INSERT TiposComprobantes ON

INSERT INTO TiposComprobantes (Id, Nombre) VALUES (1, 'Factura A');

SET IDENTITY_INSERT TiposComprobantes OFF

Comentarios:

  • Con SET IDENTITY_INSERT <NombreTabla> ON permitimos la actualización de valores explícitos en la Tabla, una vez hecho esto, siempre que el valor insertado sea superior al máximo de la tabla, se actualiza la semilla del IDENTITY.
  • Recordar que una columna IDENTITY no implica necesariamente que el valor de la misma sea estrictamente único, esto lo define una clave de este tipo.
  • Para hacer esto debemos tener permisos de ALTER sobre la tabla.
  • Solo una tabla puede tener la condición de IDENTITY_INSERT ON en la sesión / conexión activa, tratar de hacer lo mismo con otra tabla arrojará un error.

Deja un comentario