| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9035 人关注过本帖
标题:当 IDENTITY_INSERT 设置为 OFF 时,不能为表中的标识列插入显式值。
只看楼主 加入收藏
jianghong_02
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:143
专家分:476
注 册:2010-10-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
当 IDENTITY_INSERT 设置为 OFF 时,不能为表中的标识列插入显式值。
USE master
GO
IF EXISTS (SELECT * FROM sysdatabases WHERE name='stuDB')
DROP DATABASE stuDB
CREATE DATABASE  stuDB
ON PRIMARY
( NAME='stuinfo',
  FILENAME='D:\project\stuinfo.mdf',
  SIZE=3,
  MAXSIZE=10,
  FILEGROWTH=15%

)

GO
USE stuDB
GO
CREATE TABLE stuinfo
(stuName CHAR(32) NOT NULL,--学生姓名
 stuNO   CHAR(8)  NOT NULL,--学号
 stuSex  bit      NOT NULL,--性别
 stuAge  int      NOT NULL,--年龄
 stuSeat  SMALLINT IDENTITY (1,1)    NOT NULL,--座位号,采用自动编号方式,且必须是1~30号
 stuAddress  TEXT          --学生地址
  
)
      --添加控制
GO
ALTER TABLE stuinfo
ADD CONSTRAINT PK_stuName PRIMARY KEY (stuName)
ALTER TABLE stuinfo
ADD CONSTRAINT UQ_stuNo  UNIQUE      (stuNo)
ALTER TABLE stuinfo
ADD CONSTRAINT UQ_stuSex  UNIQUE      (stuSex)
ALTER TABLE stuinfo
ADD CONSTRAINT CK_stuAge  CHECK      (stuAge BETWEEN 15 AND 40)
ALTER TABLE stuinfo
ADD CONSTRAINT CK_stuSeat CHECK     (stuSeat BETWEEN 1 AND 30)
ALTER TABLE stuinfo
ADD CONSTRAINT DF_stuAddress DEFAULT ('地址不祥') FOR stuAddress
INSERT INTO stuinfo(stuName,stuNo,stuSex,stuAge,stuSeat,stuAddress) VALUES ('张秋丽','s25301','男','18','1','北京海淀')
GO
----消息 544,级别 16,状态 1,第 13 行
当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'stuinfo' 中的标识列插入显式值。
要求标识列插入显式值,应该怎么做呢……请高手赐教,万分感谢

[ 本帖最后由 jianghong_02 于 2010-10-9 20:01 编辑 ]
搜索更多相关主题的帖子: IDENTITY INSERT OFF 
2010-10-09 19:36
zhaoyang1008
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:30
专家分:110
注 册:2010-9-15
收藏
得分:5 
用IDENTITY(30,-1),这样IDENTITY初始种子值是30,每增加一行减一,然后再添加 constraint CK_stuSeat CHECK     (stuSeat >0),这样就可以保证只有1-30个座位号
2010-10-09 22:15
gameohyes
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:53
帖 子:1275
专家分:3629
注 册:2009-3-5
收藏
得分:5 
/*-----修改标识列的值-----*/
set identity_insert tableName on

C#超级群 74862681,欢迎大家的到来!
2010-10-09 22:53
jianghong_02
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:143
专家分:476
注 册:2010-10-2
收藏
得分:0 
以上二个方法我都是试了可还是不行也………………
2010-10-10 13:59
zhaoyang1008
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:30
专家分:110
注 册:2010-9-15
收藏
得分:5 
你插入这条数据的座位号必须是1吗?如果不是的话insert的时候把这个字段省略就行了
收到的鲜花
  • jianghong_022010-10-11 09:13 送鲜花  2朵   附言:谢谢……指导………………
2010-10-10 15:15
tangyunzhong
Rank: 5Rank: 5
来 自:广西
等 级:职业侠客
威 望:4
帖 子:97
专家分:364
注 册:2010-7-28
收藏
得分:5 
里面的stuSeat字段是标识,所以在插入的时个不能在语句插入值啊,所以改成下面的就可以,但我这个下面没有包含1-30座位的方法.还有你的stuSex字段是bit类型,只能是0或1.所以应该像下面语句
INSERT INTO stuinfo(stuName,stuNo,stuSex,stuAge,stuAddress) VALUES ('张秋丽','s25301','1','18','北京海淀')

.修改了你出现的问题后还发现你的表设计上还有很多问题.比如
1.你的stuSex索引是唯一索引,这样你只能增加两行,也就是只有stuSex值为0或1两行了.所以你的这个索引似乎没有必要吧,还是你有其他想法.
2.stuSeat既是索引(唯一索引)又是有标识这样这个字段是系统自己生成的,在check的时候一旦你插入的数据行达到或未达到
30行后就会出现问题.标识只能递增或递减.

[ 本帖最后由 tangyunzhong 于 2010-10-10 16:17 编辑 ]
2010-10-10 15:46
jianghong_02
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:143
专家分:476
注 册:2010-10-2
收藏
得分:0 
谢谢……谢谢您谆谆教诲,我把sql图表放在附件里,您
SQL表.rar (12.5 KB)
再帮我看看,我应该怎么写,在线等待您的指导……
2010-10-10 17:47
gameohyes
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:53
帖 子:1275
专家分:3629
注 册:2009-3-5
收藏
得分:0 
程序代码:
USE master
GO 
IF EXISTS (SELECT * FROM sysdatabases WHERE name='stuDB')
DROP DATABASE stuDB
CREATE DATABASE  stuDB
ON PRIMARY
( NAME='stuinfo',
  FILENAME='D:\stuinfo.mdf',
  SIZE=3,
  MAXSIZE=10,
  FILEGROWTH=15%

)

GO
USE stuDB
GO
CREATE TABLE stuinfo
(stuName CHAR(32) NOT NULL,--学生姓名
stuNO   CHAR(8)  NOT NULL,--学号
stuSex  bit      NOT NULL,--性别
stuAge  int      NOT NULL,--年龄
stuSeat  SMALLINT IDENTITY (1,1)    NOT NULL,--座位号,采用自动编号方式,且必须是1~30号
stuAddress  TEXT          --学生地址
  
)
      --添加控制
GO
ALTER TABLE stuinfo
ADD CONSTRAINT PK_stuName PRIMARY KEY (stuName)
ALTER TABLE stuinfo
ADD CONSTRAINT UQ_stuNo  UNIQUE      (stuNo)
ALTER TABLE stuinfo
ADD CONSTRAINT UQ_stuSex  UNIQUE      (stuSex)
ALTER TABLE stuinfo
ADD CONSTRAINT CK_stuAge  CHECK      (stuAge BETWEEN 15 AND 40)
ALTER TABLE stuinfo
ADD CONSTRAINT CK_stuSeat CHECK     (stuSeat BETWEEN 1 AND 30)
ALTER TABLE stuinfo
ADD CONSTRAINT DF_stuAddress DEFAULT ('地址不祥') FOR stuAddress

set identity_insert stuinfo on
INSERT INTO stuinfo(stuName,stuNo,stuSex,stuAge,stuSeat,stuAddress) VALUES ('张秋丽','s25301',1,'18','1','北京海淀')
set identity_insert stuinfo off
GO
收到的鲜花
  • jianghong_022010-10-11 09:11 送鲜花  3朵   附言:谢谢您好的指导……成功了,非常感谢

C#超级群 74862681,欢迎大家的到来!
2010-10-10 22:33
tangyunzhong
Rank: 5Rank: 5
来 自:广西
等 级:职业侠客
威 望:4
帖 子:97
专家分:364
注 册:2010-7-28
收藏
得分:0 
回复 8楼 gameohyes
你试一下,你上面的语句行得通吗?
还不是和楼主的一个意思
2010-10-11 08:16
jianghong_02
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:143
专家分:476
注 册:2010-10-2
收藏
得分:0 
谢谢……成功了
2010-10-11 09:09
快速回复:当 IDENTITY_INSERT 设置为 OFF 时,不能为表中的标识列插入显式值。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021591 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved