2010-12-10 91 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。這不僅對於同時存在的記錄有效,而且對於在刪除另一個之後插入的新記錄也是有效的。這對避免衝突非常有用。雖然它似乎有時會打破一些人的品味,但並不能解決它。

如果您需要將自選號碼分配給記錄,請添加另一列。自動索引列應始終使用。其他用戶告訴你如何擺弄索引,但非常小心地使用這個功能。