Aqui les dejo una pequeña explicación de como funciona IDENTITY_INSERT de SQL Server
Es muy simple, SIRVE PARA ACTIVAR O DESACTIVAR la insercción automática de datos enteros-autonuméricos-auto incrementales.
Imaginate qte tienes una tabla con un campo "id", el cual se inserta automáticamente a su siguiente número. Pues consiste simplemente en desactivarlo para que lo insertes tu y no el sistema.
NOTA IMPORTANTE: No deberás tratar de insertar un "id" que ya exista o tendrás un error cuando se trate de un campo llave o tengas una restricción que impida duplicados.
Entonces, solo asegurate de que el registro no exista previamente en la tabla.
Aqui te dejo un ejemplo de código y el resultado en una imagen:
use mydatabase
go
if exists(select 1 from INFORMATION_SCHEMA.TABLES where TABLE_NAME='test_identity' and TABLE_SCHEMA='dbo')
begin
drop table dbo.test_identity
end
go
create table dbo.test_identity
(
id int not null identity,
valor nvarchar(50),
activo bit not null constraint df_test_identity_activo default(1),
constraint pk_test_identity primary key(id)
)
go
insert into dbo.test_identity(valor) values('Primer registro, id automatico')
insert into dbo.test_identity(valor) values('Segundo registro, id automatico')
go
--desactivar identity
SET IDENTITY_INSERT dbo.test_identity ON
insert into dbo.test_identity(id,valor) values(25,'Tercer registgro, id asignado por mi')
insert into dbo.test_identity(id,valor) values(27,'Cuarto registro, id asignado por mi')
--activar identity
SET IDENTITY_INSERT dbo.test_identity OFF
insert into dbo.test_identity(valor) values('Quinto registro, id automatico')
--desactivar identity
SET IDENTITY_INSERT dbo.test_identity ON
insert into dbo.test_identity(id,valor) values(11,'Sexto registro, id INTERMEDIO asignado por mi')
--activar identity
SET IDENTITY_INSERT dbo.test_identity OFF
insert into dbo.test_identity(valor) values('Septimo registro, id automatico')
go
select * from dbo.test_identity
La maravilla de esta funcionalidad es que se ajusta automáticamente el siguiente máximo autonumerico!
Es decir, que si el "id" mas alto que insertaste de manera directa es un 100, el siguiente auto asignado sería el 101.
Me encantó!
Saludos!