我在SQL下面使用SQL创建带有auto_increment主键的表,但是在截断表后发现主键未重置为零,因为在向其插入数据后主键从上次截断开始继续增加。我相信主要对象将太大而不会导致溢出。该怎么解决?
CREATE TABLE dbo.BM_SM_ERR
(
SMCWBM int identity, -- primary key
SMCWDM varchar(10) NOT NULL,
PRIMARY KEY CLUSTERED (SMCWBM)
)
with identity_gap=1
sybase版本Adaptive Server Enterprise 15.7
答案 0 :(得分:3)
删除,截断表或关闭后,身份不会重置。如果需要使用sp_chgattribute过程,则必须手动将其重置:
1> insert into BM_SM_ERR(SMCWDM) values ('x')
2> go
(1 row affected)
1> insert into BM_SM_ERR(SMCWDM) values ('y')
2> go
(1 row affected)
1> insert into BM_SM_ERR(SMCWDM) values ('z')
2> go
(1 row affected)
1> select * from BM_SM_ERR
2> go
SMCWBM SMCWDM
----------- ----------
1 x
2 y
3 z
(3 rows affected)
1> truncate table BM_SM_ERR
2> go
1> insert into BM_SM_ERR(SMCWDM) values ('v')
2> go
(1 row affected)
1> select * from BM_SM_ERR
2> go
SMCWBM SMCWDM
----------- ----------
4 v
(1 row affected)
1> truncate table BM_SM_ERR
2> go
1> exec sp_chgattribute BM_SM_ERR, 'identity_burn_max', 0, '0'
2> go
DBCC execution completed. If DBCC printed error messages, contact a user with System Administrator (SA) role.
'identity_burn_max' attribute of object 'BM_SM_ERR' changed to 0.
(return status = 0)
1> insert into BM_SM_ERR(SMCWDM) values ('q')
2> go
(1 row affected)
1> select * from BM_SM_ERR
2> go
SMCWBM SMCWDM
----------- ----------
1 q
(1 row affected)