primary-key - 在sybase中使用auto_increment主键创建表,截断表后主键不为零

标签 primary-key sybase sybase-ase15

我使用下面的SQL创建了一个带有auto_increment主键的表,但是发现在truncate表后主键没有重置为零,因为在插入数据后主键从上次truncate开始继续增加。我相信primary会太大而不会导致溢出。怎么解决?

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

最佳答案

删除、截断表或关闭后,身份不会重置。如果您想要使用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)

关于primary-key - 在sybase中使用auto_increment主键创建表,截断表后主键不为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51510280/

相关文章:

postgresql - 如果不存在则插入行会导致竞争条件?

database - 什么是 Hi/Lo 算法?

mysql - MySQL索引中的 'name'和 'symbol'是什么?

database - 如何连接同一台Sybase服务器上不同数据库中的表

java - 无法使用 JDBC 连接到 Syabse 数据库

java - 无法连接到 Sybase 数据库

java - 如何用java从Sybase DB服务器获取所有数据库名称的列表

sql - 使用计算列作为主键的一部分是个好主意吗?

java - 'CREATE TABLE' 数据库中的多语句事务中不允许使用 'tempdb' 命令