1

我正在尝试将数据存储在本地数据库(SQL CE)中。我已经像这样设置了 RowObject 的属性:

    [Column(IsPrimaryKey=true,CanBeNull=false,IsDbGenerated=true,AutoSync=AutoSync.OnInsert,DbType="int NOT NULL IDENTITY")]
    public int key
    { get; set; }

当我插入一条新记录时,主键会自动递增。但是,如果我删除一条或多条记录,然后插入一条新记录,则其主键值对应于最后插入的记录的主键值加一,尽管该记录已被删除。我知道不可能更新所有主键。但是,是否可以控制主键的递增,避免主键的连续递增呢?

好的,谢谢你的回答。我问是因为我担心PK达到最大值。也许这对我的项目来说不是一个真正的问题,但我想了解如何处理它,以防它发生。万一,如果可能的话,如果数据库完全满了,我该如何理解和处理。

4

1 回答 1

3

这违反了自动增量。

我有时由于需要禁用列的自动递增来添加在旧位置删除的行,然后再次启用它。

如果您坚持这样做,您可以添加 2 个触发器,在删除触发器禁用列的自动增量行为中,然后在插入触发器之后的另一个触发器上再次启用它。
因此,在删除时禁用它,在下一次插入时使用 max(ID)+1 添加它,并在插入后再次启用它。

例如:

-------------人员表--------------

ID[Auto-Increment]----姓名----年龄
10000--------杰克-------21
10001---- ---------------肖恩----19
10002--------阿尔伯特-----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 的记录,我把这个负担放在了你的肩上。

祝你好运。

于 2012-12-22T15:52:39.840 回答