1. 程式人生 > >把SQL Server表中的自動編號ID重新開始排列

把SQL Server表中的自動編號ID重新開始排列

說法一:

有兩種方法:
方法1:
truncate table 你的表名 --這樣不但將資料刪除,而且可以重新置位identity屬性的欄位。


方法2:
delete from 你的表名
dbcc checkident(你的表名,reseed,0) 重新置位identity屬性的欄位,讓其下個值從1開始


說法二:

1.TRUNCATE TABLE
刪除表中的所有行,而不記錄單個行刪除操作。

語法
TRUNCATE TABLE name

引數
name

是要截斷的表的名稱或要刪除其全部行的表的名稱。

註釋
TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日誌資源少。

DELETE 語句每次刪除一行,並在事務日誌中為所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放儲存表資料所用的資料頁來刪除資料,並且只在事務日誌中記錄頁的釋放。

TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置為該列的種子。如果想保留標識計數值,請改用 DELETE。如果要刪除表定義及其資料,請使用 DROP TABLE 語句。

對於由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應使用不帶 WHERE 子句的 DELETE 語句。由於 TRUNCATE TABLE 不記錄在日誌中,所以它不能啟用觸發器。

TRUNCATE TABLE 不能用於參與了索引檢視的表。

2.
DBCC CHECKIDENT
檢查指定表的當前標識值,如有必要,還對標識值進行更正。

語法
DBCC CHECKIDENT
    ( 'table_name'
        [ , { NORESEED
                | { RESEED [ , new_reseed_value ] }
            }
        ]
    )

引數
'table_name'

是要對其當前標識值進行檢查的表名。表名必須符合識別符號規則。有關更多資訊,請參見使用識別符號。指定的表必須包含標識列。

NORESEED

指定不應更正當前標識值。

RESEED

指定應該更正當前標識值。

new_reseed_value

是在標識列中重新賦值時要使用的值。

註釋
如有必要,DBCC CHECKIDENT 會更正列的當前標識值。然而,如果標識列是使用 NOT FOR REPLICATION 子句(在 CREATE TABLE 或 ALTER TABLE 語句中)建立的,則不更正當前標識值。

如果標識列上有主鍵或唯一鍵約束,無效標識資訊可能會導致錯誤資訊 2627

說法三:

如何定義自動編號欄位的初始值和步進值?

問題:

如何定義自動編號欄位的初始值和步進值?
如何定義自動增加欄位的初始值和步進值?
如何使刪除過資料的自動增加欄位的開始值重新從1開始?

回答:

通過以下語句,你可以在建表的時候指定其起始值和步進值:

CREATE TABLE tblNewOrder2 (
  OrderId AUTOINCREMENT (1000, 10),
  ItemId LONG, Quantity LONG) 



你也可以用下面的語句修改下一個起始值和步進值:

ALTER TABLE tblOrder
  ALTER COLUMN OrderId COUNTER (2000, 50) 


要重新開始:
ALTER TABLE tableName
  ALTER COLUMN OrderId COUNTER (1, 1) 


在 VBE 介面裡面用以下程式碼:
docmd.runsql "ALTER TABLE tableName ALTER COLUMN OrderId COUNTER (1, 1)"



這裡要注意的是自動編號往往被用作標識記錄的唯一性,但是 Jet 在用 DDL 語句更改自動編號的同時不會保證修改後的自動編號仍然保持唯一性,因此會出現標識號重複的現象。要避免這一現象最好把自動編號設定為主鍵、或者不可重複。

Please realize that Jet won't prevent you from altering AutoNumber seed and increment values that produce duplicate values. However, if the AutoNumber column has been designated as the primary key or it contains a unique index, you will be prevented from saving rows with duplicates.

不過這些操作需要 JET 4.0。

如果不會用查詢或者 JET SQL 去參考以下文章中的動畫
http://access911.net/index.asp?board=4&recordid=77FAB11E1ADC

如何用查詢設計嚮導建立一個查詢
http://access911.net/down/eg/swf/createquery.swf

如何執行一段 jet sql 程式碼
http://access911.net/down/eg/swf/runsql.swf