SQL Server 中使用示例向标识列插入值的说明。为此,我们将使用数据库中的以下 Customer 表。
从下面的代码片段中,您可以观察到 [Customer Key] 列是一个标识列。我们的工作是向此标识列 [Customer Key] 插入值,即,标识插入。
CREATE TABLE [Customer] ( [CustomerKey] [int] IDENTITY(1,1) NOT NULL, [FirstName] [varchar](50) NULL, [LastName] [varchar](50) NULL, [BirthDate] [date] NULL, [EmailAddress] [nvarchar](50) NULL, [Yearly Income] [money] NULL, [Profession] [nvarchar](100) NULL )
在 SQL 中向标识列插入值
在我们开始使用命令之前,让我们看看使用以下语句将值插入标识列(Customer Key)时会发生什么。
INSERT INTO [Customer]
([CustomerKey], [FirstName],[LastName],[BirthDate],[EmailAddress],[Yearly Income],[Profession])
VALUES (1, 'John', 'Miller', '2006-01-28',
'sql@tutorialgateway.org', 20000, 'Developer')
运行上述查询以将值插入标识列
Messages
--------
Msg 544, Level 16, State 1, Line 2
Cannot insert explicit value for identity column in table 'Customer' when it is set to OFF.
从上图可以看出,它抛出了一个错误,消息为:当 SQL IDENTITY_INSERT 设置为 OFF 时,无法为表 ‘Customer’ 的标识列插入显式值。这是因为任何使用 IDENTITY 属性的列都将基于起始位置,并根据表中插入的每一行的增量值自动递增。
让我们看看,当我们不包括标识列(customer key)并向 Server 插入剩余值时会发生什么。
-- Example
INSERT INTO [Customer]
([FirstName],[LastName],[BirthDate],
[EmailAddress],[Yearly Income],[Profession])
VALUES ('John', 'Miller', '2006-01-28',
'sql@tutorialgateway.org', 20000, 'Developer')
Messages
--------
(1 row(s) affected)
从上图可以看出,受影响了 1 行。现在,让我们使用以下查询看看上述语句是否将值插入了 Customer 表。
SELECT * FROM [Customer]
从下图可以看出,由于 IDENTITY,Customer Key 值 1 被自动插入。

SET IDENTITY_INSERT ON / OFF
在此插入示例中,我们将使用 SET IDENTITY_INSERT 属性将列的 IDENTITY 设置为 ON 和 OFF。
-- Example
SET IDENTITY_INSERT [Customer] ON
INSERT INTO [Customer]
([CustomerKey], [FirstName],[LastName],[BirthDate],
[EmailAddress],[Yearly Income],[Profession])
VALUES (100, 'Tutorial', 'Gateway', '2015-08-31',
'contact@tutorialgateway.org', 50000, 'Founder')
SET IDENTITY_INSERT [Customer] OFF

以下语句将在 Customers 表上将 SQL Identity Insert 设置为 ON。
SET IDENTITY_INSERT [Customer] ON
以下语句将把显式值插入 Customer 表。它包括 IDENTITY 列 [Customer Key]
INSERT INTO [Customer]
([CustomerKey], [FirstName],[LastName],[BirthDate],
[EmailAddress],[Yearly Income],[Profession])
VALUES (100, 'Tutorial', 'Gateway', '2015-08-31',
'contact@tutorialgateway.org', 50000, 'Founder')
以下语句将在 Customers 表上将 Identity_Insert 设置为 OFF。请记住,在此语句之后,您将无法将值插入标识列(此处为 [Customer Key])。
SET IDENTITY_INSERT [Customer] OFF
使用下面的查询检查上述语句是否将值插入了标识列。
SELECT * FROM [Customer]
您可以看到我们已成功将值插入标识列。

一个会话只允许一个表将其 IDENTITY_INSERT 属性设置为 ON。如果您尝试在多个表上发出 SET IDENTITY_INSERT ON 语句,SSMS 将返回错误消息。
评论已关闭。