想要產生這種唯一標識的格式的數據:
6f9619ff-8b86-d011-b42d-00c04fc964ff
應該怎么做呢?
================================================================
答:
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 常量:
字符串格式:'6f9619ff-8b86-d011-b42d-00c04fc964ff'
二進制格式:0xff19966f868b11d0b42d00c04fc964ff
uniqueidentifier 數據類型不會按照 identity 屬性的方式為插入的行自動生成新的 id。例如,若要獲取新的 uniqueidentifier 值,則表必須具有指定 newid 函數或 newsequentialid 函數的 default 子句,或 insert 語句必須使用 newid 函數。
create table myuniquetable
(uniquecolumn uniqueidentifier default newid(),
characters varchar(10) )
go
insert into myuniquetable(characters) values ('uiok')
insert into myuniquetable values (newid(), 'uiok')
go
注意:
您可以使用 newsequentialid 生成 guid 以減少葉級別索引上的頁爭用。newsequentialid 只能與 uniqueidentifier 類型的表列的 default 約束一起使用。
uniqueidentifier 列中可以多次出現某個 uniqueidentifier 值,除非對該列也指定了 unique 或 primary key 約束。當多個行引用源表中的同一個主鍵時,引用其他表中 uniqueidentifier 主鍵的外鍵列中可以多次出現各個 uniqueidentifier 值。
一個表可以有多個 uniqueidentifier 列。每個表中可以指定一個具有 rowguidcol 屬性的 uniqueidentifier 列。rowguidcol 屬性指明此列的 uniqueidentifier 值可唯一地標識表中的行。但是,屬性不會執行任何強制實現唯一性的操作。必須使用其他機制強制實現唯一性,例如指定列的 primary key 約束。rowguidcol 屬性主要用于 microsoft sql server 2005 復制。具有更新訂閱的合并復制和事務復制使用 uniqueidentifier 列來確保在表的多個副本中唯一地標識行。
uniqueidentifier 數據類型具有下列缺點:
值長且難懂。這使用戶難以正確鍵入它們,并且更難記住。
這些值是隨機的,而且它們不支持任何使其對用戶更有意義的模式。
也沒有任何方式可以決定生成 uniqueidentifier 值的順序。它們不適用于那些依賴遞增的鍵值的現有應用程序。
當 uniqueidentifier 為 16 字節時,其數據類型比其他數據類型(例如 4 字節的整數)大。這意味著使用 uniqueidentifier 鍵生成索引的速度相對慢于使用 int 鍵生成索引的速度。
在不要求全局唯一性或首選使用按序列增加的鍵時,請考慮使用 identity 屬性。
|
新聞熱點
疑難解答