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 個資料列受到影響)

*/

你可能感兴趣的:(C++,c,C#,Go)