----------
ID NAME
3 A
4 B
5 C
----------
当我删除所有记录时,它会在第五个记录后继续,但我希望它必须插入此表的第一个索引。有谁可以帮助我?
答案 0 :(得分:2)
我假设您已将ID列作为IDENTITY列,并且您希望将其重置为在从表中删除所有行后再次从1开始。
首先,我要说有这样的需求(ID值从1开始)往往意味着你正在做的事情有问题 - IDENTITY列在编号中总是有差距,应该对待作为不透明的斑点。它们似乎是整数,并且易于记忆,这只是实现细节。
其次,如果你想进行这样的重置,你可以使用DBCC CHECKIDENT
修改的
如果您确实依赖于这些ID值(例如,因为它们也在应用程序中使用),则可以很好地指示该列不应该首先具有IDENTITY属性。遗憾的是,您无法直接删除此属性 - 您必须创建没有此属性的表的副本,复制所有行,删除原始表并重命名副本。 Management Studio将假装您可以删除该属性,但将执行我刚才在幕后所描述的内容。
答案 1 :(得分:1)
一种简单的方法是
TRUNCATE TABLE mytable;
而不是
DELETE FROM mytable
来自TRUNCATE TABLE (Transact-SQL)
如果表包含标识列,则该列的计数器将重置为为该列定义的种子值。如果未定义种子,则使用默认值1。要保留身份计数器,请改用DELETE。
答案 2 :(得分:0)
看起来您的ID
列是IDENTITY列 - 这些列将始终添加下一个值(无论删除)。
具有特定ID的要求听起来像您的应用程序设计依赖于它,这不是一个好习惯。 ID字段确实有间隙(这是正常的) - 您的应用程序不应该依赖它们。
无论如何,这里有几种方法:
对于一次性,请使用SET IDENTITY INSERT ON
:
SET IDENTITY INSERT dbo.myTable ON
INSERT INTO myTable
(ID, NAME)
VALUES
(1, 'H')
SET IDENTITY INSERT dbo.myTable OFF
要重置种子,您需要使用RESEED
命令{/ 1}}:
DBCC CHECKIDENT('myTable', RESEED, 0)
答案 3 :(得分:0)
我想你想再次使用1重新启动autogenerated id列的值? 如果是IDENTITY列,则可以使用以下命令重置种子值
DBCC CHECKIDENT('YourTableNameHere', RESEED, 0)
答案 4 :(得分:0)
数据库ID功能旨在确保不同的记录永远不会具有相同的ID。这不仅对同时存在的记录有效,而且对于在删除另一个记录后插入的新记录也有效。这对避免冲突非常有用。虽然它似乎有时会破坏一些人的品味,但不能解决它。
如果您需要为记录分配自选数字,请添加另一列。应始终使用自动索引列。其他用户告诉你如何摆弄索引但是非常小心地使用这个功能。