仅当使用了列列表并且 IDENTITY |
您所在的位置:网站首页 › ZNDB-III › 仅当使用了列列表并且 IDENTITY |
在资源管理器里面给表插入数据时,主键一直显示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,但是修改数据的时候就不需要了,直接修改就可以了 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |