2012-11-27 40 views
-2

可能重複:
Reset AutoIncrement in SqlServer after Delete自動遞增始終加1,以前行,即使前一行已經下降

我在與一個身份自動遞增一個惱人的問題Sql Server 2008數據庫中的列值。當我從表中刪除一行(或刪除所有行)時,當我添加一個新條目時,它將從插入到先前記錄中的值中遞增,而不管該記錄是否仍然存在。

我想知道是否有人知道如何得到它,這樣IDENTITY列將自動增加EXISTS以前的記錄。

我的代碼如下所示:

CREATE TABLE Product 
    (
      Product_Barcode INT NOT NULL PRIMARY KEY IDENTITY, 
      Product_Description VARCHAR(255), 
      Product_Name VARCHAR(255), 
      Product_Supplier VARCHAR(255) FOREIGN KEY REFERENCES Supplier(Supplier_Name), 
      Product_Size VARCHAR(255), 
      Product_Weight FLOAT 
    ); 
+2

這就是標識列的功能;爲什麼它的價值是什麼?這只是查詢或連接表的關鍵。 – LittleBobbyTables

+0

@LittleBobbyTables:這很重要,因爲在爲產品創建記錄時,我還會爲通過外鍵鏈接到條形碼的庫存表創建記錄。我通過編程獲取產品條碼中的最後一個條目,並將值加1,除非在這種情況下沒有條目告訴它從1開始。這會產生問題,如果刪除條目,則ID將繼續我的代碼會指向錯誤的產品,並且我無法準確地查詢空表的前一個條形碼值=/ –

+1

@ Termin8tor - ...或者您可以使用SCOPE_IDENTITY()來獲取正確的從產品表插入值。 – LittleBobbyTables

回答

1

通常你不會想這個,因爲新的和過去的記錄可以共享的ID。如果您有參考限制,這可能會導致混淆。

我知道如何做到這一點的唯一方法是通過插入使用子查詢例如。

INSERT INTO Product (Product_Barcode, Product_Description) VALUES (SELECT MAX(Product_Barcode) + 1 FROM Product, "Any description here"); 
+0

*通常情況下,你不會希望這個*同意,這是不安全的 - 特別是如果有併發訪問。一個更安全的方法是在你最初的INSERT之後使用'SCOPE_IDENTITY()'作爲LittleBobbyTables的建議。 – Leigh