Básicamente, hay 2 formas diferentes de INSERTAR registros sin tener un error:
1) Cuando IDENTITY_INSERT está desactivado. LA "ID" PRINCIPAL DE LA CLAVE NO DEBE ESTAR PRESENTE
2) Cuando IDENTITY_INSERT está activado. LA "ID" PRINCIPAL DE LA CLAVE DEBE ESTAR PRESENTE
Según el siguiente ejemplo de la misma tabla creada con una CLAVE PRIMARIA DE IDENTIDAD:
CREATE TABLE [dbo].[Persons] (
ID INT IDENTITY(1,1) PRIMARY KEY,
LastName VARCHAR(40) NOT NULL,
FirstName VARCHAR(40)
);
1) En el primer ejemplo, puede insertar nuevos registros en la tabla sin obtener un error cuando IDENTITY_INSERT está desactivado. La clave primaria "ID" no debe estar presente desde los estados "INSERT INTO" y un valor único de identificación se añadirá automáticamente: . Si la ID está presente desde INSERT en este caso, obtendrá el error "No se puede insertar un valor explícito para la columna de identificación en la tabla ..."
SET IDENTITY_INSERT [dbo].[Persons] OFF;
INSERT INTO [dbo].[Persons] (FirstName,LastName)
VALUES ('JANE','DOE');
INSERT INTO Persons (FirstName,LastName)
VALUES ('JOE','BROWN');
SALIDA de la TABLA [dbo]. [Personas] será:
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
2) En el segundo ejemplo, puede insertar nuevos registros en la tabla sin obtener un error cuando IDENTITY_INSERT está activado. La "ID" PRINCIPAL DE LA CLAVE DEBE ESTAR PRESENTE en las declaraciones "INSERT INTO" siempre que el valor de ID no exista : si la ID NO está presente desde INSERT en este caso, obtendrá el error "El valor explícito debe ser especificado para la tabla de columnas de identidad ... "
SET IDENTITY_INSERT [dbo].[Persons] ON;
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (5,'JOHN','WHITE');
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (3,'JACK','BLACK');
SALIDA de la TABLA [dbo]. [Personas] será:
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
3 BLACK JACK
5 WHITE JOHN