CREATE TABLE MyUniqueTable
(UniqueColumn UNIQUEIDENTIFIER DEFAULT NEWID(),
Characters VARCHAR(10) )
GO
INSERT INTO MyUniqueTable(Characters) VALUES ('abc')
INSERT INTO MyUniqueTable VALUES (NEWID(), 'def')
GO
uniqueidentifier是通用唯一識別碼 (GUID)
NEWID()傳回型別為uniqueidentifier
SQL SERVER線上說明中的例子:
declare @myid uniqueidentifier
set @myid=newid()
print 'Value of @myid is '+cast(@myid as varchar(255))
每次運行以上程式返回不同的uniqueidentifier
uniqueidentifier
通用唯一識別碼 (GUID)。
注釋
uniqueidentifier 資料類型的列或局部變數可用兩種方法初始化為一個值:
使用 NEWID 函數。
將字串常量轉換為如下形式(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中每個 x 是 0-9 或 a-f 範圍內的一個十六進位的數字)。例如,6F9619FF-8B86-D011-B42D-00C04FC964FF 即為有效 uniqueidentifier 值。
比較子可與 uniqueidentifier 值一起使用。然而,排列並非通過比較兩個值的位元模式來實現。允許對 uniqueidentifier 值執行的操作只有比較 (=, <> , <, > , <=, > =) 和檢查 NULL(IS NULL 和 IS NOT NULL)。不允許使用其它算術運算子。所有的列約束及屬性(IDENTITY 除外)均允許用於 uniqueidentifier 資料類型。
使用 uniqueidentifier 資料
uniqueidentifier 資料類型儲存 16 位元組的二進位值,該值的使用與通用唯一識別碼 (GUID) 一樣。GUID 是一個唯一的位元字;世界上的任何兩台電腦都不會產生重複的 GUID 值。GUID 主要用於在擁有多個節點、多台電腦的網路中,分配必須具有唯一性的標識符。
uniqueidentifier 列的 GUID 值通常由以下方式獲得:
在 Transact-SQL 語句、批處理或指令碼中調用 NEWID 函數。
在應用程式代碼中,調用返回 GUID 值的應用程式 API 函數或方法。
Transact-SQL NEWID 函數以及應用程式 API 函數和方法從它們網卡上的標識數字以及 CPU 時鐘的唯一數字產生新的 uniqueidentifier 值。每個網卡都有唯一的標識號。由 NEWID 返回的 uniqueidentifier 使用伺服器上的網卡產生。由應用程式 API 函數和方法返回的 uniqueidentifier 使用客戶機上的網卡產生。
一般不將 uniqueidentifier 定義為常量,因為很難保證實際建立的 uniqueidentifier 具有唯一性。指定 uniqueidentifier 常量的方法有兩種:
字串格式
'6F9619FF-8B86-D011-B42D-00C04FC964FF '
二進位格式
0xff19966f868b11d0b42d00c04fc964ff
uniqueidentifier 資料類型不象IDENTITY 屬性那樣為新插入的行自動產生新的ID。為了得到新的 uniqueidentifier 值,表必須具有一個指定 NEWID 函數的 DEFAULT 子句,或使用 NEWID 函數的 INSERT 語句:
CREATE TABLE MyUniqueTable
(UniqueColumn UNIQUEIDENTIFIER DEFAULT NEWID(),
Characters VARCHAR(10) )
GO
INSERT INTO MyUniqueTable(Characters) VALUES ( 'abc ')
INSERT INTO MyUniqueTable VALUES (NEWID(), 'def ')
GO
uniqueidentifier 列可以包含多次出現的 uniqueidentifier 值,除非也對此列指定了 UNIQUE 或 PRIMARY KEY 約束。當有多行引用源表中的同一主鍵時,引用其它表的 uniqueidentifier 主鍵的外鍵列將包含多次出現的個別 uniqueidentifier 值。
一個表可以有多個 uniqueidentifier 列。每個表中可以指定一個具有 ROWGUIDCOL 屬性的 uniqueidentifier 列。ROWGUIDCOL 屬性工作表明此列的 uniqueidentifier 值唯一地標識表中的行。但是,該屬性並沒有執行該唯一性。唯一性必須通過其它機制來執行,比如為列指定 PRIMARY KEY 約束。ROWGUIDCOL 屬性主要用於 SQL Server 複製。
uniqueidentifier 資料類型的主要優點是保證由 Transact-SQL NEWID 函數或應用程式 GUID 函數產生的值在全球是唯一的。
uniqueidentifier 資料類型的具有幾個缺點:
值長且難懂。這使使用者難以正確鍵入它們,並且更難記住。
這些值是隨機的,而且它們不能接受任何使它們對使用者變得更有意義的模式。
沒有任何方式可以決定產生 uniqueidentifier 值的順序。它們不適用於那些依賴遞增的索引值的現有應用程式