在SQL Server的表中,可能會(huì)有兩種特殊的列。一種是標(biāo)識(shí)列(Identity),一種是全球唯一標(biāo)識(shí)符(GUID) 首先看第一種 通過使用 IDENTITY 屬性可以實(shí)現(xiàn)標(biāo)識(shí)符列。這使得開發(fā)人員可以為表中所插入的第一行指定一個(gè)標(biāo)識(shí)號(hào)(Identity Seed 屬性),并確定要添加到
在SQL Server的表中,可能會(huì)有兩種特殊的列。一種是標(biāo)識(shí)列(Identity),一種是全球唯一標(biāo)識(shí)符(GUID)
首先看第一種
通過使用 IDENTITY 屬性可以實(shí)現(xiàn)標(biāo)識(shí)符列。這使得開發(fā)人員可以為表中所插入的第一行指定一個(gè)標(biāo)識(shí)號(hào)(Identity Seed 屬性),并確定要添加到種子上的增量(Identity Increment 屬性)以確定后面的標(biāo)識(shí)號(hào)。將值插入到有標(biāo)識(shí)符列的表中之后,數(shù)據(jù)庫引擎會(huì)通過向種子添加增量來自動(dòng)生成下一個(gè)標(biāo)識(shí)值。當(dāng)您向現(xiàn)有表中添加標(biāo)識(shí)符列時(shí),還會(huì)將標(biāo)識(shí)號(hào)添加到現(xiàn)有表行中,并按照最初插入這些行的順序應(yīng)用種子值和增量值。同時(shí)還為所有新添加的行生成標(biāo)識(shí)號(hào)。不能修改現(xiàn)有表列來添加 IDENTITY 屬性。
在用 IDENTITY 屬性定義標(biāo)識(shí)符列時(shí),注意下列幾點(diǎn):
如果在經(jīng)常進(jìn)行刪除操作的表中存在標(biāo)識(shí)符列,那么標(biāo)識(shí)值之間可能會(huì)出現(xiàn)斷缺。已刪除的標(biāo)識(shí)值不再重新使用。要避免出現(xiàn)這類斷缺,請(qǐng)勿使用 IDENTITY 屬性。而是可以在插入行時(shí),以標(biāo)識(shí)符列中現(xiàn)有的值為基礎(chǔ)創(chuàng)建一個(gè)用于確定新標(biāo)識(shí)符值的觸發(fā)器。
與標(biāo)識(shí)列有關(guān)幾個(gè)特殊關(guān)鍵字
SELECT $IDENTITY FROM Adventureworks.Sales.SalesOrderHeader
SELECT IDENTITYCOL FROM Adventureworks.Sales.SalesOrderHeader
還有一個(gè)系統(tǒng)變量,可以返回當(dāng)前最新的標(biāo)識(shí)值: @@identity
然后來看看全球唯一標(biāo)識(shí)符列
盡管 IDENTITY 屬性在一個(gè)表內(nèi)自動(dòng)進(jìn)行行編號(hào),但具有各自標(biāo)識(shí)符列的各個(gè)表可以生成相同的值。這是因?yàn)?IDENTITY 屬性僅在使用它的表上保證是唯一的。如果應(yīng)用程序生成一個(gè)標(biāo)識(shí)符列,并且該列在整個(gè)數(shù)據(jù)庫或全球聯(lián)網(wǎng)的所有計(jì)算機(jī)上的所有數(shù)據(jù)庫中必須是唯一的,請(qǐng)使用 uniqueidentifier 數(shù)據(jù)類型和 NEWID 或 NEWSEQUENTIALID() 函數(shù)。此外,還可以應(yīng)用 ROWGUIDCOL 屬性以指示新列是行 GUID 列。與使用 IDENTITY 屬性定義的列不同,數(shù)據(jù)庫引擎不會(huì)為 uniqueidentifier 類型的列自動(dòng)生成值。若要插入全局唯一值,請(qǐng)為該列創(chuàng)建 DEFAULT 定義來使用 NEWID 或 NEWSEQUENTIALID 函數(shù)生成全局唯一值。有關(guān)詳細(xì)信息,美國空間,香港服務(wù)器,請(qǐng)參閱使用 uniqueidentifier 數(shù)據(jù)。
可以使用 $ROWGUID 關(guān)鍵字在選擇列表中引用具有 ROWGUICOL 屬性的列。這與通過使用 $IDENTITY 關(guān)鍵字可以引用 IDENTITY 列的方法類似。一個(gè)表只能有一個(gè) ROWGUIDCOL 列,且必須通過使用 uniqueidentifier 數(shù)據(jù)類型定義該列。OBJECTPROPERTY (Transact-SQL) 函數(shù)可用于確定一個(gè)表是否具有 ROWGUIDCOL 列,香港服務(wù)器,COLUMNPROPERTY (Transact-SQL) 函數(shù)可用于確定 ROWGUIDCOL 列的名稱。
以下示例創(chuàng)建 uniqueidentifier 列作為主鍵的表。此示例在 DEFAULT 約束中使用 NEWSEQUENTIALID() 函數(shù)為新行提供值。將 ROWGUIDCOL 屬性應(yīng)用到 uniqueidentifier 列,以便可以使用 $ROWGUID 關(guān)鍵字對(duì)其進(jìn)行引用。
CREATE TABLE dbo.Globally_Unique_Data (guid uniqueidentifier CONSTRAINT Guid_Default DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, Employee_Name varchar(60) CONSTRAINT Guid_PK PRIMARY KEY (guid) );聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com