建立與修改識別碼資料行

您可以使用識別碼資料行,在資料表中建立自動遞增的識別碼。您可以為每個資料表僅建立一個識別碼資料行和一個 GUID 資料行。

IDENTITY 屬性

您可以使用 IDENTITY 屬性來實作識別碼資料行。這可以讓開發人員同時指定第一個插入資料表之資料列的識別號碼 (Identity Seed 屬性),以及要加入種子的遞增值 (Identity Increment 屬性) 以決定連續的識別號碼。當值插入有識別碼資料行的資料表時,Database Engine 會將遞增值加入種子,自動產生下一個識別值。將識別碼資料行加入至現有資料表時,識別碼便會加入至資料表的現有資料列,並按照原本插入這些資料列的順序,套用初始值及遞增值。任何加入的新資料列也都會產生識別碼。您不能修改現有的資料表資料行來加入 IDENTITY 屬性。

當您使用 IDENTITY 屬性來定義識別碼資料行時,請考慮下列項目:

  • 資料表只能有一個以 IDENTITY 屬性定義的資料行,而且該資料行必須使用 decimal、int、numeric、smallint、bigint 或 tinyint 資料類型定義。

  • 可指定種子和遞增值。這兩者的預設值均為 1。

  • 識別碼資料行絕不可允許 Null 值,而且絕不能包含 DEFAULT 定義或物件。

  • 在 IDENTITY 屬性設定之後,可使用 $IDENTITY 關鍵字在選取清單中參考資料行。也可以使用名稱參考資料行。

  • 您可以使用 OBJECTPROPERTY 函數來判斷資料表是否有 IDENTITY 資料行,並使用 COLUMNPROPERTY 函數來決定 IDENTITY 資料行的名稱。

  • SET IDENTITY_INSERT 可以用來停用資料行的 IDENTITY 屬性,表示資料行需明確插入值。

    [!附註]

    如果識別碼資料行位於刪除頻率高的資料表,在識別值之間會出現差距。刪除的識別值不會重複使用。若要避免這類間距,請不要使用 IDENTITY 屬性。而是建立觸發程序,以便在插入資料列時,根據識別碼資料行的現有數值來決定新的識別碼數值。

全域唯一識別碼

雖然 IDENTITY 屬性會在一個資料表中自動增加資料列的編號,但是每個不同的資料表都有自己的識別碼資料行,可以產生相同的數值。這是因為 IDENTITY 屬性只保證在使用它的資料表中是唯一的。如果應用程式必須產生對於整個資料庫或甚至全世界每個網路電腦的每個資料庫都是唯一的識別碼資料行,請使用 uniqueidentifier 資料類型和 NEWIDNEWSEQUENTIALID() 函數。此外,您可以套用 ROWGUIDCOL 屬性,表示新資料行就是資料列 GUID 資料行。與使用 IDENTITY 屬性定義的資料行不同,Database Engine 不會針對 uniqueidentifier 類型的資料行自動產生值。若要插入全域唯一值,請在資料行建立 DEFAULT 定義,並使用 NEWID 或 NEWSEQUENTIALID 函數來產生全域唯一值。如需詳細資訊,請參閱<使用 Uniqueidentifier 資料>。

您可以使用 $ROWGUID 關鍵字,在選取清單中參考含有 ROWGUICOL 屬性的資料行。這就和 IDENTITY 資料行可使用 $IDENTITY 關鍵字來參考一樣。資料表只能有一個 ROWGUIDCOL 資料行,而且該資料行必須使用 uniqueidentifier 資料類型定義。您可以使用 OBJECTPROPERTY (Transact-SQL) 函數來判斷資料表是否有 ROWGUIDCOL 資料行,並使用 COLUMNPROPERTY (Transact-SQL) 函數來判斷 ROWGUIDCOL 資料行的名稱。

下列範例會建立一個將 uniqueidentifier 資料行當做主索引鍵的資料表。此範例會在 DEFAULT 條件約束中使用 NEWSEQUENTIALID() 函數,以便提供新資料列的值。ROWGUIDCOL 屬性會套用到 uniqueidentifier 資料行,以便可以使用 $ROWGUID 關鍵字來參考它。

CREATE TABLE dbo.Globally_Unique_Data
    (guid uniqueidentifier CONSTRAINT Guid_Default DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
    Employee_Name varchar(60)
    CONSTRAINT Guid_PK PRIMARY KEY (guid) );

若要在建立資料表時建立新的識別碼資料行

CREATE TABLE (Transact-SQL)

若要在現有的資料表建立新識別碼資料行

ALTER TABLE (Transact-SQL)

若要刪除識別碼資料行

ALTER TABLE (Transact-SQL)

如何:從資料表中刪除資料行 (Visual Database Tools)

若要獲得有關識別欄位的資訊

sys.identity_columns (Transact-SQL)

IDENT_INCR (Transact-SQL)

IDENT_SEED (Transact-SQL)

檢查並更正指定之資料表的目前識別值

DBCC CHECKIDENT (Transact-SQL)

設定新的初始值

DBCC CHECKIDENT (Transact-SQL)