我在VS 2016中创建了一个数据库。我还编写了一个WebApplication(ASP.Net/C#/Entity Framework),我可以在不同的文本框中输入不同的值。这些保存在我的数据库中。每条记录都会收到一个ID(主键)。
假设我有5条记录,ID为1-5。如果我在删除这5个ID后创建新记录,则新记录的ID为6,但我希望重用ID为1。
我怎样才能做到这一点?
答案 0 :(得分:3)
我假设您正在使用自动增量为Id列分配新的键值。你假设因为没有记录,那么下一个自由值将是1,但它只是从前一个最高值开始递增。
这是一个糟糕的主意,但如果您真的希望回收键值,那么您可以自行关闭自动增量并手动管理键值,但这很容易出错。
你真的需要这样做吗? Int和BigInt可以容纳非常大的数字,你是否可能用完关键值以便可能需要回收?
如果您只想将自动增量重置为1 I suggest you look at this post
答案 1 :(得分:2)
这不是问题。您的数据库具有Primery Key with Identity(1,1)。每条新记录的ID都会大于最后添加的记录。
如果要删除所有可以使用的行
TRUNCATE TABLE tablename
。 否则您可能会考虑关闭自动增量并为ID提供数字,以及在您的表格中查找较小的免费ID。
答案 2 :(得分:1)
假设我有5条记录,ID为1-5。如果我在删除这5个ID之后创建一个新记录,那么新记录的ID是6,但它应该是1。
您的id列似乎是Identity.You需要在每次删除5行后使用command以下,以便从1再次开始您的值
DBCC CHECKIDENT (yourtable, RESEED, 1);
除非你截断表,否则这不会工作,因为你在Id上有一个主键,所以你需要处理你的主键策略
答案 3 :(得分:1)
因为SQL Server没有跟踪删除的唯一标识符,所以你只有一个选项可以重置
DBCC CHECKIDENT (yourtable, RESEED, 0);
这不是您要找的,但SQL服务器不会跟踪哪些内容被删除。