仅当使用了列列表并且 IDENTITY

您所在的位置:网站首页 ZNDB-III 仅当使用了列列表并且 IDENTITY

仅当使用了列列表并且 IDENTITY

2023-09-26 22:47| 来源: 网络整理| 查看: 265

在资源管理器里面给表插入数据时,主键一直显示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