MSSQL自增列重複與不連續--整理帖

本文探讨了自增列在不同情况下的不连续与重复问题,包括插入失败自动回滚、手动回滚、重置种子及删除操作导致的不连续,以及手动插入和种子重置引起的重复现象。

--> Title : 自增列重複與不連續

--> Author : wufeng4552

--> Date : 2009-11-13 08:31:12

--自增列通常在以下幾種情況而導致不連續

if object_id('tb')is not null drop table tb

go

create table tb(ID int identity(0,1),name varchar(10)unique)

--1插入失敗自動回滾

insert tb([name]) select 'A'

insert tb([name]) select 'A'

/*

錯誤原因

訊息2627,層級14,狀態1,行4

違反UNIQUE KEY 條件約束'UQ__tb__6B79F03D'。無法在物件'dbo.tb' 中插入重複的索引鍵。

陳述式已經結束。

*/

insert tb([name]) select 'B'

select * from tb

-->查詢結果

/*

(1 個資料列受到影響)

ID name

----------- ----------

0 A

2 B

(2 個資料列受到影響)

*/

if object_id('tb')is not null drop table tb

go

create table tb(ID int identity(0,1),name varchar(10)unique)

--2手動回滾

insert tb([name]) select 'B'

begin tran

insert tb([name]) select 'A'

rollback tran

insert tb([name]) select 'C'

select * from tb

-->查詢結果

/*

ID name

----------- ----------

0 B

2 C

(2 個資料列受到影響)

*/

if object_id('tb')is not null drop table tb

go

create table tb(ID int identity(0,1),name varchar(10)unique)

--3重置種子

insert tb([name]) select 'B'

dbcc checkident(tb,reseed,2)

insert tb([name]) select 'C'

insert tb([name]) select 'D'

select * from tb

-->查詢結果

/*

ID name

----------- ----------

0 B

3 C

4 D

(3 個資料列受到影響)*/

if object_id('tb')is not null drop table tb

go

create table tb(ID int identity(0,1),name varchar(10)unique)

--4刪除

insert tb([name]) select 'B'

insert tb([name]) select 'C'

delete tb where [name]='C'

insert tb([name]) select 'D'

select * from tb

-->查詢結果

/*

ID name

----------- ----------

0 B

2 D

(2 個資料列受到影響)

*/

--自增列通常在以下幾種情況而導致重複

if object_id('tb')is not null drop table tb

go

create table tb(ID int identity(0,1),name varchar(10)unique)

--1手動插入

insert tb([name]) select 'B'

insert tb([name]) select 'C'

set identity_insert tb on

insert tb(id,[name]) select 1,'D'

set identity_insert tb off

select * from tb

-->查詢結果

/*

ID name

----------- ----------

0 B

1 C

1 D

(3 個資料列受到影響)

*/

if object_id('tb')is not null drop table tb

go

create table tb(ID int identity(0,1),name varchar(10)unique)

--2種子重置

insert tb([name]) select 'B'

dbcc checkident(tb,reseed,-1)

insert tb([name]) select 'C'

select * from tb

-->查詢結果

/*

ID name

----------- ----------

0 B

0 C

(2 個資料列受到影響)

*/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值