共用方式為


建立與修改識別碼資料行

更新: 2006 年 4 月 14 日

您可以為每個資料表僅建立一個識別碼資料行和一個 GUID 資料行。

IDENTITY 屬性

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

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

  • 資料表只能有一個以 IDENTITY 屬性定義的資料行,而且該資料行必須使用 decimalintnumericsmallintbiginttinyint 資料類型定義。
  • 可指定種子和遞增值。這兩者的預設值均為 1。
  • 識別碼資料行絕不可允許 Null 值,而且絕不能包含 DEFAULT 定義或物件。
  • 在 IDENTITY 屬性設定之後,可使用 $IDENTITY 關鍵字在選取清單中參考資料行。也可以使用名稱參考資料行。
  • 您可以使用 OBJECTPROPERTY 函數來判斷資料表是否有 IDENTITY 資料行,並使用 COLUMNPROPERTY 函數來決定 IDENTITY 資料行的名稱。
  • SET IDENTITY_INSERT 可以用來停用資料行的 IDENTITY 屬性,表示資料行需明確插入值。
    ms191131.note(zh-tw,SQL.90).gif附註:
    如果識別碼資料行位於刪除頻率高的資料表,在識別值之間會出現差距。刪除的識別值不會重複使用。若要避免這類間距,請不要使用 IDENTITY 屬性。而是建立觸發程序,以便在插入資料列時,根據識別碼資料行的現有數值來決定新的識別碼數值。

全域唯一識別碼

雖然 IDENTITY 屬性會在一個資料表中自動增加資料列的編號,但是每個不同的資料表都有自己的識別碼資料行,可以產生相同的數值。這是因為 IDENTITY 屬性只保證在使用它的資料表中是唯一的。如果應用程式必須產生對於整個資料庫或甚至全世界每個網路電腦的每個資料庫都是唯一的識別碼資料行,請使用 uniqueidentifier 資料類型和 NEWID (Transact-SQL)NEWSEQUENTIALID() 函數。Database Engine 並不會自動替資料行產生數值。若要插入全域唯一值,請在資料行建立 DEFAULT 定義,並使用 NEWID 或 NEWSEQUENTIALID 函數來產生全域唯一值。

在 ROWGUIDCOL 屬性設定之後,可使用 $ROWGUID 關鍵字在選取清單中參考資料行。這就和 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)

請參閱

概念

自動編號與識別碼資料行
使用 Uniqueidentifier 資料

其他資源

COLUMNPROPERTY (Transact-SQL)
NEWID (Transact-SQL)
OBJECTPROPERTY (Transact-SQL)
uniqueidentifier (Transact-SQL)
複寫識別資料行

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 4 月 14 日

變更的內容:
  • 移除有關使用 UNIQUE 條件約束搭配 ROWGUID 資料行的內容。
  • 釐清使用 ROWGUIDCOL 屬性的目的。
新增內容
  • 新增在建立 GUID 資料行時,除了 NEWID 以外可使用 NEWSEQUENTIALID 的參考。
  • 新增建立含有 GUID 資料行之資料表的範例。

2005 年 12 月 5 日

新增內容:
  • 新增有關將識別碼資料行加入現有資料表的資訊,並釐清不可將 IDENTITY 屬性加入現有的資料行。