首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2000 設計表自動編號欄位:IDENTITY、SEED/INCREMENT 與 DBCC RESEED 完整指南

     編輯:關於SqlServer

圖形介面設定(企業管理器)

  1. 右鍵資料表 → 設計表
  2. 選取 ID 欄位 (int) → 下方面板 識別欄位 → 是
  3. 識別種子:起始值(預設 1)
  4. 識別遞增:步長(預設 1)

T-SQL 建表語法

CREATE TABLE MyTable (
    ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,  -- 種子=1, 遞增=1
    Col1 VARCHAR(50),
    Col2 INT
);
  • IDENTITY(seed, increment) 僅支援整數型別
  • 每個資料表僅能有一個 IDENTITY 欄位

Access 專用語法(不適用 SQL Server)

-- Access 專用
CREATE TABLE MyTable (ID COUNTER(1000,10) PRIMARY KEY, ...);
ALTER TABLE MyTable ALTER COLUMN ID COUNTER(2000,50);
ALTER TABLE MyTable ALTER COLUMN ID COUNTER(1,1); -- 重置空表

SQL Server 不支援 COUNTER 型別與 ALTER COLUMN 變更 IDENTITY。

為何 ALTER TABLE ALTER COLUMN IDENTITY 會失敗?

依 MSDN 定義,ALTER COLUMN 僅能變更:資料類型、精度、排序規則、NULL/NOT NULL、ROWGUIDCOL。IDENTITY 屬性不在可變更清單中。

只能用 ALTER TABLE ... ADD 新欄位 INT IDENTITY(1,1) 新增自動編號欄位,無法將既有欄位改為 IDENTITY。

重設自動編號起始值:DBCC CHECKIDENT

-- 查看目前識別值
DBCC CHECKIDENT ('MyTable', NORESEED);

-- 重設下一個值為 101(目前值設為 100)
DBCC CHECKIDENT ('MyTable', RESEED, 100);

-- 重設為 1(資料表必須為空,或 TRUNCATE 後)
TRUNCATE TABLE MyTable;
DBCC CHECKIDENT ('MyTable', RESEED, 0);  -- 下一筆將是 1

複寫/訂閱環境下的 IDENTITY 管理

  • 發行端:NOT FOR REPLICATION 選項防止訂閱端同步時產生衝突
  • 合併式複寫:建議使用 UNIQUEIDENTIFIER + NEWID() 或 NEWSEQUENTIALID() 取代 IDENTITY
  • 訂閱端插入不觸發行端 IDENTITY,避免間隙與衝突

最佳實踐總結

  1. 建表時直接宣告 IDENTITY(1,1)
  2. 勿嘗試 ALTER COLUMN 修改 IDENTITY,需重建表
  3. 重設種子用 DBCC CHECKIDENT,配合 TRUNCATE 最乾淨
  4. 跨環境同步資料時,評估 NOT FOR REPLICATION 或改用 GUID
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved