在SQL Server的表中,可能會有兩種特殊的列。一種是標識列(Identity),一種是全球唯一標識符(GUID) 首先看第一種 通過使用 IDENTITY 屬性可以實現標識符列。這使得開發人員可以為表中所插入的第一行指定一個標識號(Identity Seed 屬性),并確定要添加到
在SQL Server的表中,可能會有兩種特殊的列。一種是標識列(Identity),一種是全球唯一標識符(GUID)
首先看第一種
通過使用 IDENTITY 屬性可以實現標識符列。這使得開發人員可以為表中所插入的第一行指定一個標識號(Identity Seed 屬性),并確定要添加到種子上的增量(Identity Increment 屬性)以確定后面的標識號。將值插入到有標識符列的表中之后,數據庫引擎會通過向種子添加增量來自動生成下一個標識值。當您向現有表中添加標識符列時,還會將標識號添加到現有表行中,并按照最初插入這些行的順序應用種子值和增量值。同時還為所有新添加的行生成標識號。不能修改現有表列來添加 IDENTITY 屬性。
在用 IDENTITY 屬性定義標識符列時,注意下列幾點:
如果在經常進行刪除操作的表中存在標識符列,那么標識值之間可能會出現斷缺。已刪除的標識值不再重新使用。要避免出現這類斷缺,請勿使用 IDENTITY 屬性。而是可以在插入行時,以標識符列中現有的值為基礎創建一個用于確定新標識符值的觸發器。
與標識列有關幾個特殊關鍵字
SELECT $IDENTITY FROM Adventureworks.Sales.SalesOrderHeader
SELECT IDENTITYCOL FROM Adventureworks.Sales.SalesOrderHeader
還有一個系統變量,可以返回當前最新的標識值: @@identity
然后來看看全球唯一標識符列
盡管 IDENTITY 屬性在一個表內自動進行行編號,但具有各自標識符列的各個表可以生成相同的值。這是因為 IDENTITY 屬性僅在使用它的表上保證是唯一的。如果應用程序生成一個標識符列,并且該列在整個數據庫或全球聯網的所有計算機上的所有數據庫中必須是唯一的,請使用 uniqueidentifier 數據類型和 NEWID 或 NEWSEQUENTIALID() 函數。此外,還可以應用 ROWGUIDCOL 屬性以指示新列是行 GUID 列。與使用 IDENTITY 屬性定義的列不同,數據庫引擎不會為 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) );聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com