欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【SQL 中主标识列IDENTITY使用技巧】,下面是详细的分享!
SQL 中主标识列IDENTITY使用技巧
本文通过一个操作实例来说明SQL中主标识列IDENTITY的使用技巧。
要求:在 sql server 2005中,建立数据表book,在表book中设有标识列,标识种子为1000,现要从另一个相同结构的表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,且复制数据时必须显示的表明字段名。
以上所分享的是关于SQL 中主标识列IDENTITY使用技巧,下面是编辑为你推荐的有价值的用户互动:
相关问题:仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,...
答:既然你插入的是null,那就不要插入嘛。弄了半天你插入一个空值,还有如果建立了主键,这些值又必须不能重复。如果一定要插入,先去掉该列的主键和聚集索引看看 >>详细
相关问题:sql表中的一列如何控制标识的当前值?
答:可以设置显示值插入 2.显示值插入(修改会话中的IDENTITY_INSERT ),临时性 ,不彻底该表列性质 SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF } 1 --一般是组合使用,已确保会话中IDENTITY_INSERT的完整状态 SET ID... >>详细
相关问题:怎样用T—SQL语句向表中的列添加主键约束并设为标识列?
答:--不能用命令为已知表的列添加标识 只能图形操作 主键可以后来加 --创建表的时候 添加标识和主键 create table ttt(id int identity(1,1) primary key not null ) --为已知表添加主键 alter table ttt add constraint pk_id primary key(id) --... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
