2

我用下面的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

4

1 回答 1

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)
于 2018-07-25T08:40:38.873 回答