在资源管理器里面给表插入数据时,主键一直显示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,但是修改数据的时候就不需要了,直接修改就可以了