Sql Server2005
2024-08-31 00:53:11
供稿:网友
--> 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 個資料列受到影響)
*/