我正在尝试在本地数据库(SQL CE)中存储数据。我已经像这样设置了RowObject的属性:
[Column(IsPrimaryKey=true,CanBeNull=false,IsDbGenerated=true,AutoSync=AutoSync.OnInsert,DbType="int NOT NULL IDENTITY")]
public int key
{ get; set; }
,插入新记录时主键自动增加。但是,如果我删除一个或多个记录然后插入新记录,则其主键值对应于最后插入记录的主键值加1,尽管该记录已被删除。 我知道无法更新所有主键。但是,是否可以控制主键的增量?并避免主键的连续增加?
好的,谢谢你的回答。我问,因为我担心PK达到最大值。也许这对我的项目来说不是一个真正的问题,但我想知道如何处理它,以防它发生。如果可能,如果数据库完全填满,我该如何理解和处理。答案 0 :(得分:3)
违反了自动增量。
我有时需要禁用列的自动增量来添加在旧位置删除的行,然后再次启用它。
如果您坚持这样做,可以在删除触发器禁用列的自动增量行为中添加2个触发器,然后在插入触发器之后的另一个触发器上再次启用它。
因此,在删除禁用它时,在下一次插入时添加max(ID)+1,然后再次插入启用它。
例如:
-------------人员表--------------
ID [自动递增] ---- ----名称年龄
10000 ------------------- -------杰克21
10001 -------------------肖恩---- 19个
10002 ------------------- Albert ----- 33
Delete from Person where ID = 10002;
set identity_insert AAA ON
现在下一个ID将是10003但你想要10002
DECLARE @ID int;
select @ID = max(ID)+1 from Person
Insert into Person(ID,Name,Age) values(@ID,'Mahdi',23)
set identity_insert AAA OFF --Auto Increments from now on
你应该检查你是否应该插入带有/不带ID的记录,我把这个负担放在你的肩膀上。
好运。