唐山网站建设

设为主页 加入收藏 繁體中文

SQL 中主标识列IDENTITY使用技能

本文通过1个操纵实例来讲明SQL中主标识列IDENTITY的使用技能。

要求:在 sql server 2005中,建立数据表book,在表book中设有标识列,标识种子为1000,现要从另1个相同结构的表book1中导进数据,两表结构定义语句以下:

create table book
(书号 int identity(1000,1) not for identity primary key clustered,
书名 char(20) not null,
出版社 char(20) check (出版社 in ('高教','浙江大学','电子','中心')),
出版日期 datetime default (getdate()),
单价 numeric(7,2) check(单价>0),
数目 smallint check(数目>=0),
总价 AS 单价*数目,
EMAIL varchar(20) check(EMAIL LIKE '%@%')
create table book1
(书号 int primary key clustered,
书名 char(20) not null,
出版社 char(20) check (出版社 in ('高教','浙江大学','电子','中心')),
出版日期 datetime default (getdate()),
单价 numeric(7,2) check(单价>0),
数目 smallint check(数目>=0),
总价 AS 单价*数目,
EMAIL varchar(20) check(EMAIL LIKE '%@%')

用以下语句来导进数据:

insert into book select * from book1

结果,系统报错为:

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

题目1:SQL SERVER 2005中如何设置IDENTITY_INSERT的值为ON?

格式为:SET IDENTITY_INSERT TABLE_NAME ON/OFF

因而用以下语句

SET IDENTITY_INSERT book ON

Insert into book select * from book1

SET IDENTITY_INSERT book OFF

结果出错提示与上面相同。为甚么已设置了表book的IDENTITY_INSERT为ON还出错呢?

重新输进指定列名的的语句:

insert into book(书号,书名) select 书号,书名 from book2

结果:系统提示成功运行。Book2中的记录按记录号的顺序插进到表book中。

结论:

这说明在主表定义标识列且加选项not for replication时,表示当通过复制向表中插进数据时,不需要遵守IDENTITY属性要求。 在复制数据时,要保证主表的IDENTITY_INSERT的状态为ON,且复制数据时必须显示的表明字段名。

唐山网站建设www.fw8.net
TAG:数目,标识,书名,单价,书号
评论加载中...
内容:
评论者: 验证码: