基本上有两种不同的方式来插入记录而不会出错:
1) 当 IDENTITY_INSERT 设置为 OFF 时。主键“ID”不得存在
2) 当 IDENTITY_INSERT 设置为 ON 时。主键“ID”必须存在
根据以下示例,使用 IDENTITY PRIMARY KEY 创建的同一表:
CREATE TABLE [dbo].[Persons] (
ID INT IDENTITY(1,1) PRIMARY KEY,
LastName VARCHAR(40) NOT NULL,
FirstName VARCHAR(40)
);
1) 在第一个示例中,当 IDENTITY_INSERT 为 OFF 时,您可以向表中插入新记录而不会出错。 “INSERT INTO”语句中的主键“ID”不得存在,并且将自动添加唯一的 ID 值:。如果在这种情况下,INSERT 中存在 ID,您将收到错误“无法为表中的标识列插入显式值...”
SET IDENTITY_INSERT [dbo].[Persons] OFF;
INSERT INTO [dbo].[Persons] (FirstName,LastName)
VALUES ('JANE','DOE');
INSERT INTO Persons (FirstName,LastName)
VALUES ('JOE','BROWN');
TABLE [dbo].[Persons] 的输出将是:
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
2) 在第二个示例中,您可以在 IDENTITY_INSERT 为 ON 时向表中插入新记录而不会出错。 “INSERT INTO”语句中的主键 “ID”必须存在只要 ID 值不存在:如果 ID 不存在于 INSERT在这种情况下,您将收到错误“必须为标识列表指定显式值...”
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');
TABLE [dbo].[Persons] 的输出将是:
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
3 BLACK JACK
5 WHITE JOHN