Sql Server2005

王朝学院·作者佚名  2009-11-14
窄屏简体版  字體: |||超大  

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

*/

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航