2010-12-10 93 views
0
---------- 
ID NAME 
3 A 
4 B 
5 C 
---------- 

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

+0

@InSane,标识列是ID,我想通过ID(1,2,6,7,8 ...) – ozkank 2010-12-10 09:54:51

回答

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 

要重新播种,你需要使用一个DBCC CHECKIDENT命令,使用RESEED

DBCC CHECKIDENT('myTable', RESEED, 0) 
1

一个简单的方法是将

TRUNCATE TABLE mytable; 

代替

DELETE FROM mytable 

TRUNCATE TABLE (Transact-SQL)

如果表包含标识列,该列的计数器复位到用于列定义的种子值。如果未定义种子,则使用默认值1。要保留身份计数器,请改为使用DELETE。

+0

的顺序插入+1,以便更聪明地使用DELETE + DBCC CHECKINDENT – InSane 2010-12-10 10:05:02

0

我想你想重新启动1自动生成的id列的值? 如果它是标识列,可以将种子值与德以下命令

DBCC CHECKIDENT('YourTableNameHere', RESEED, 0) 
2

我假设你有你的ID列作为一个标识列,复位,要重置它在1再次启动,从表中删除所有行后。

首先,我想说有这样一个需求(ID值从1开始)往往意味着你在做什么有什么问题 - IDENTITY列的编号总是有空位,应该是视为不透明的斑点。它们似乎是整数,并且容易记住的事实仅仅是实现细节。

第二,如果你想要做这样的重置,你会使用DBCC CHECKIDENT


编辑

如果你确实依赖于这些ID值(比方说,因为他们”重用也在应用程序中使用),这是一个很好的指示器,列首先不应该具有IDENTITY属性。不幸的是,你不能直接删除这个属性 - 你不得不创建没有这个属性的表的副本,复制所有的行,删除原始表,并重命名副本。管理工作室会假装你可以删除该财产,但会做我刚才在幕后描述的。

0

数据库ID功能旨在确保不同的记录永远不会有相同的ID。这不仅对于同时存在的记录有效,而且对于在删除另一个之后插入的新记录也是有效的。这对避免冲突非常有用。虽然它似乎有时会打破一些人的品味,但并不能解决它。

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