在SQL Server的表中,可能會有兩種特殊的列。一種是標識列(Identity),一種是全球惟一標識符(GUID)數據庫
首先看第一種ide
經過使用 IDENTITY 屬性能夠實現標識符列。這使得開發人員能夠爲表中所插入的第一行指定一個標識號(Identity Seed 屬性),並肯定要添加到種子上的增量(Identity Increment 屬性)以肯定後面的標識號。將值插入到有標識符列的表中以後,數據庫引擎會經過向種子添加增量來自動生成下一個標識值。當您向現有表中添加標識符列時,還會將標識號添加到現有錶行中,並按照最初插入這些行的順序應用種子值和增量值。同時還爲全部新添加的行生成標識號。不能修改現有表列來添加 IDENTITY 屬性。函數
在用 IDENTITY 屬性定義標識符列時,注意下列幾點:post
注意:ui
若是在常常進行刪除操做的表中存在標識符列,那麼標識值之間可能會出現斷缺。已刪除的標識值再也不從新使用。要避免出現這類斷缺,請勿使用 IDENTITY 屬性。而是能夠在插入行時,以標識符列中現有的值爲基礎建立一個用於肯定新標識符值的觸發器。code
與標識列有關幾個特殊關鍵字對象
SELECT $IDENTITY FROM Adventureworks.Sales.SalesOrderHeader
SELECT IDENTITYCOL FROM Adventureworks.Sales.SalesOrderHeaderblog
還有一個系統變量,能夠返回當前最新的標識值: @@identityci
而後來看看全球惟一標識符列開發
儘管 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) );