Beware while reseed with DBCC
Checkident('Tab_Name',Reseed,1) because, the moment identity value reaches to
the values which is present in ur identity column, it won’t allow you to enter
record due to duplicity, since u said ur id column is PK and throw error...
For explanation we are taking creating
a table, this table has no Identity property set for ID field
--TABLE WITHOUT iDENTTITY
create table tab_test
(id int primary key,
name varchar(10))
Command(s) completed successfully.
Now lets insert a record with Id value
2
insert into tab_test values(2,'vikram')
(1 row(s) affected)
Lets set the identity property if ID
column with the help of designer.
Go the Table Designer à Select ID column à Go to Property à Expand Identity specification àset YES to isIdentity àset seed and increment value to 1.
Now since our identity value is set
lets find the current identity value
select ident_current('tab_test') as CurrentIdentity
CurrentIdentity
---------------------------------------
2
So now if we try to insert record, it
will take 3 as ID value. Lets insert a record in the table
insert into tab_test values('keshari') --IT Will take identity
value as 3
select * from tab_test
id
name
----------- ----------
2
vikram
3
keshari
Now lets reseed the identity value to
0
dbcc checkident('tab_test',reseed,0)
Checking current identity value
select ident_current('tab_test') as CurrentIdentity
CurrentIdentity
---------------------------------------
0
Now lets insert record in the table
and see the ID field value
insert into tab_test values('mahapatra') --It will take identity
values as 1
select * from tab_test
id
name
----------- ----------
1
mahapatra
2
vikram
3
keshari
Now here we saw the new id value was
taken as 1, lets find what is the current and next identity value
select ident_current('tab_test') as CurrentIdentity
CurrentIdentity
---------------------------------------
1
Now we can see the current value is 1,
so the next identity value will be 2, but record with 2 as ID value is already
exist so will it take 2 as next identity value?
insert into tab_test values('Sibani') --now since the identity
current value is 2 and Id column with 2 value is present, it wont allow
Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint
'PK__tab_test__3213E83FE45A5CA7'. Cannot insert duplicate key in object
'dbo.tab_test'. The duplicate key value is (2).
The statement has been terminated.
Conclusion: While Reseed value for
identity column having primary Key defined on it, be aware else you will get
error in some point of time if the next identity value exist in the table
records.
Ask yourself, are you having fun with SQL Server?
No comments:
Post a Comment