最近碰到一个很坑爹的事情。
我数据库有张表,它又有一主键,有自增的属性(+1)。现在主键已经到了1543,其中不可避免有断层(就是主键ID 为100 或 112被删除)。
问题 情况一:我现在添加数据时主键ID 重新从1开始自增(这是我现在出现的问题,主键ID重新从1开始自增)。
情况二:我现在添加数据时主键ID 是那些缺失的ID(弃)。
情况一:从1开始自增长只能通过Truncate Table清空所有数据。
情况二:使用 Set Identity_Insert 表名 Off 语句关闭 Id 列写入保护,手动写入断层Id,然后再 Set Identity_Insert 表名 On
多谢各位的教育。这个问题俺通过 DBCC CheckIdent(Table,RESEED,ID)这个命令重新设定了Identity的值,这样自增就从现在的最大值开始增长了(即从1543开始)。
1. 要从1开始自增,需要用TRUNCATE TABLE清空表中所有数据。
2.
a) 删除时不要直接删除,通过增加一个字段标识出已删除的记录。
b) 或者在代码中手动计算ID
可以 确定没有用TRUNCATE TABLE删除,只是用了delete删除了几条数据而已。
补充 情况一:我现在添加数据时主键ID 重新从1开始自增(这个是我现在每添加一条数据它是重新从1开始自增的,现在已经添加到了5,即添加了5条数据了)
情况二:我现在添加数据时主键ID 是那些缺失的ID(即我现在添加信息是替补了我删除的ID)
可能以上描述有问题导致 dudu 您老看花了眼,在此深感愧疚。
@烟雨中闲置: 看三楼飞扬的尘埃的回答
@dudu: 多谢各位的教育。这个问题俺通过 DBCC CheckIdent(Table,RESEED,ID)这个命令重新设定了Identity的值,这样自增就从现在的最大值开始增长了(即从1543开始)。
可以替换成Uniqueidentifier类型的字段 对应C#的类型是Guid 数据库中可以采用newId()来替代自动增长。
多谢各位的教育。这个问题俺通过 DBCC CheckIdent(Table,RESEED,ID)这个命令重新设定了Identity的值,这样自增就从现在的最大值开始增长了(即从1543开始)。
最好的方法是删除的数据不要从表中移除,而是将其状态至为已删除。当然,试情况而定,如果是完关紧要的数据,可以直接删除。
多谢各位的教育。这个问题俺通过 DBCC CheckIdent(Table,RESEED,ID)这个命令重新设定了Identity的值,这样自增就从现在的最大值开始增长了(即从1543开始)。