如何在表中插入空记录

时间:2010-12-10 09:49:24

标签: sql-server tsql

----------
ID NAME
3   A
4   B
5   C
----------

当我删除所有记录时,它会在第五个记录后继续,但我希望它必须插入此表的第一个索引。有谁可以帮助我?

5 个答案:

答案 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。这不仅对同时存在的记录有效,而且对于在删除另一个记录后插入的新记录也有效。这对避免冲突非常有用。虽然它似乎有时会破坏一些人的品味,但不能解决它。

如果您需要为记录分配自选数字,请添加另一列。应始终使用自动索引列。其他用户告诉你如何摆弄索引但是非常小心地使用这个功能。

相关问题