set identity_insert 表名 on

set identity_insert testBak on|off用法

作用:testbak(id int identity(1,1) , char(10) name)
set identity_insert testBak on 使identity(1,1)自动设置序列无效,然后用户就可以为所欲为插入需要的id值了。

1 创建一个含自增序列的表格

create  table   testIdentity(
id    int   identity(1,1),
name  char(10)
)

2 正常向表中插入一条数据

---id号会自动生成为1,这里只用显示指出要插入的字段为name  ,且name值为'ming'
insert   into   testIdentity(name)  values('ming');

3 指定id值向表中插入数据

注意:这是错误的做法,identify(1,1)会自动生成id号,identify(1,1)和用户指定id值二者会冲突

insert  into   testIdentity(id,name) values(9,'yue');
报错:当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'testIdentity' 中的标识列插入显式值。
原因:此时已设定  id  为identity(1,1)自动生成,不能再自己设置id的值了。
改正:
---让identity(1,1) 设置失效
set     IDENTITY_INSERT    testIdentity  on
insert  into   testIdentity(id,name) values(9,'yue');
set     IDENTITY_INSERT    testIdentity  off
此时则插入成功。

4 备份该表

--创建空的备份表
select    *    into   testBak    from    testIdentity  where 1=0
--让备份表的identity(1,1)设置无效
set   identity_insert  testBak  on
--显示指出要复制的字段(id,name)
insert   into    testBak(id,name)   select   *    from   testIdentity
set   identity_insert  testBak off

5 其他注意事项:

(1)每一次连接会话中的任一时刻,只能对一个表设置IDENTITY_INSERT ON,且设置只对当前会话有效;

(2)set identity_insert testBak on set identity_insert testBak off 连用;

(3)在对标识列执行插入操作进,一定要显示列出此标识列(当然,同时也就需要列出相关的其他列了)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值