Existem basicamente duas maneiras diferentes de INSERIR registros sem ter um erro:
1) Quando o IDENTITY_INSERT está desativado. A CHAVE PRIMÁRIA "ID" NÃO DEVE ESTAR PRESENTE
2) Quando o IDENTITY_INSERT está ativado. A CHAVE PRIMÁRIA "ID" DEVE ESTAR PRESENTE
Conforme o exemplo a seguir da mesma tabela criada com uma CHAVE PRIMÁRIA DE IDENTIDADE:
CREATE TABLE [dbo].[Persons] (
ID INT IDENTITY(1,1) PRIMARY KEY,
LastName VARCHAR(40) NOT NULL,
FirstName VARCHAR(40)
);
1) No primeiro exemplo, você pode inserir novos registros na tabela sem obter um erro quando o IDENTITY_INSERT estiver desativado. A chave primária "ID" não devem estar presentes nas Demonstrações "INSERT INTO" e um valor de identificação exclusivo será adicionado automaticamente . Se o ID estiver presente no INSERT, nesse caso, você receberá o erro "Não é possível inserir um valor explícito para identificar a coluna na tabela ..."
SET IDENTITY_INSERT [dbo].[Persons] OFF;
INSERT INTO [dbo].[Persons] (FirstName,LastName)
VALUES ('JANE','DOE');
INSERT INTO Persons (FirstName,LastName)
VALUES ('JOE','BROWN');
SAÍDA da TABELA [dbo]. [Pessoas] será:
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
2) No segundo exemplo, você pode inserir novos registros na tabela sem obter um erro quando o IDENTITY_INSERT estiver ativado. A PRIMARY KEY "ID" DEVE ESTAR PRESENTE nas instruções "INSERT INTO" desde que o valor da ID ainda não exista : Se a ID NÃO estiver presente na INSERT nesse caso, você receberá o erro "O valor explícito deve ser especificado para a tabela da coluna de identidade ... "
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');
SAÍDA da TABELA [dbo]. [Pessoas] será:
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
3 BLACK JACK
5 WHITE JOHN