| 
 | 
 
       Sql Server2005_mssql学习_编程技术-你的首页-uuhomepage.com
 
  --> 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 個資料列受到影響)
 
 
 
 
 
 
  */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  
 
 
 
 |