仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'ClassInfo'中的标识列指定显式值。

本文解决在SQL中向自增主键表插入数据时遇到的问题,包括错误消息8101和2627的详细解析,提供使用资源管理器和T-SQL语句的两种解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在资源管理器里面给表插入数据时,主键一直显示null,无法插入数据,但是非主键可以插入数据,当时感觉很奇怪,不过这个表是前一段时间创建的,一些设置约束条件也不记得了,然后表右键打开编辑脚本到窗口以为是正常的(下面的建表语句)

CREATE TABLE [dbo].[ClassInfo](
	[cId] [int] IDENTITY(1,1) NOT NULL,
	[cTitle] [nvarchar](10) NOT NULL,
 CONSTRAINT [PK_ClassInfo] PRIMARY KEY CLUSTERED 
(
	[cId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

然后在自己新建查询窗口编写T-SQL语句,添加数据的时候出错了

消息 8101,级别 16,状态 1,第 1 行 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'ClassInfo'中的标识列指定显式值。

问题原因:

建表的时候给主键设置的约束条件是自增,不能直接添加数据

解决方案:

方法一(使用资源管理器):既然主键自增,那只需要添加其他属性的数据,不用管主键的值(默认从1开始)

方法二(使用T-SQL语句):必须先设置IDENTITY_INSERT 为 ON,添加数据完成后再设置IDENTITY_INSERT 为 OFF(如果不设置下次不能自增)

set IDENTITY_INSERT ClassInfo ON    --需要设置IDENTITY_INSERT为ON才能成功
insert into ClassInfo(cId,cTitle)   --需要设置(cId,cTitle)指定列才能成功
values(003,'Nacy')
set IDENTITY_INSERT ClassInfo OFF

还需要注意的是:

1. 我在开始使用资源管理的时候,点了一下非主属性,然后主属性自增为1,但是我当时不理解以为是自己乱点输进去的1,所以后面又用sql语句添加主属性为1的数据,这就报了错:

消息 2627,级别 14,状态 1,第 8 行 违反了 PRIMARY KEY 约束 'PK_ClassInfo'。不能在对象 'dbo.ClassInfo' 中插入重复键。

这时候只要将sql语句中的主属性改一下就可以了 

2. 添加数据的时候需要set PRIMARY KEY,但是修改数据的时候就不需要了,直接修改就可以了

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值