在一條 INSERT、SELECT INTO 或大容量復(fù)制語句完成后,@@IDENTITY 中包含語句生成的最后一個(gè)標(biāo)識(shí)值。如果語句未影響任何包含標(biāo)識(shí)列的表,則 @@IDENTITY 返回 NULL。如果插入了多個(gè)行,生成了多個(gè)標(biāo)識(shí)值,則 @@IDENTITY 將返回最后生成的標(biāo)識(shí)值。如果語句觸發(fā)了一個(gè)或多個(gè)觸發(fā)器,該觸發(fā)器又執(zhí)行了生成標(biāo)識(shí)值的插入操作,那么,在語句執(zhí)行后立即調(diào)用 @@IDENTITY 將返回觸發(fā)器生成的最后一個(gè)標(biāo)識(shí)值。如果對(duì)包含標(biāo)識(shí)列的表執(zhí)行插入操作后觸發(fā)了觸發(fā)器,并且觸發(fā)器對(duì)另一個(gè)沒有標(biāo)識(shí)列的表執(zhí)行了插入操作,則 @@IDENTITY 將返回第一次插入的標(biāo)識(shí)值。出現(xiàn) INSERT 或 SELECT INTO 語句失敗或大容量復(fù)制失敗,或者事務(wù)被回滾的情況時(shí),@@IDENTITY 值不會(huì)恢復(fù)為以前的設(shè)置。
如果語句和事務(wù)失敗,它們會(huì)更改表的當(dāng)前標(biāo)識(shí),從而使標(biāo)識(shí)列中的值出現(xiàn)不連貫現(xiàn)象。即使未提交試圖向表中插入值的事務(wù),也永遠(yuǎn)無法回滾標(biāo)識(shí)值。例如,如果因 IGNORE_DUP_KEY 沖突而導(dǎo)致 INSERT 語句失敗,表的當(dāng)前標(biāo)識(shí)值仍然會(huì)增加。
@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 是相似的函數(shù),因?yàn)樗麄兌挤祷夭迦氲奖淼?IDENTITY 列的最后一個(gè)值。
@@IDENTITY 和 SCOPE_IDENTITY 可以返回當(dāng)前會(huì)話中的所有表中生成的最后一個(gè)標(biāo)識(shí)值。但是,SCOPE_IDENTITY 只在當(dāng)前作用域內(nèi)返回值,而 @@IDENTITY 不限于特定的作用域。
IDENT_CURRENT 不受作用域和會(huì)話的限制,而受限于指定的表。IDENT_CURRENT 可以返回任何會(huì)話和任何作用域中為特定表生成的標(biāo)識(shí)值。
@@IDENTITY 函數(shù)的作用域是執(zhí)行該函數(shù)的本地服務(wù)器上的當(dāng)前會(huì)話。此函數(shù)不能應(yīng)用于遠(yuǎn)程或鏈接服務(wù)器。若要獲得其他服務(wù)器上的標(biāo)識(shí)值,請(qǐng)?jiān)谶h(yuǎn)程服務(wù)器或鏈接服務(wù)器上執(zhí)行存儲(chǔ)過程,并使(在遠(yuǎn)程或鏈接服務(wù)器的環(huán)境中執(zhí)行的)該存儲(chǔ)過程收集標(biāo)識(shí)值,并將其返回本地服務(wù)器上的發(fā)出調(diào)用的連接。
以下示例向包含標(biāo)識(shí)列 (LocationID) 的表中插入一行,并使用 @@IDENTITY 顯示新行中使用的標(biāo)識(shí)值:
標(biāo)簽:葫蘆島 鶴崗 保定 石嘴山 沈陽 招商 常德 昆明
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《@@IDENTITY與SCOPE_IDENTITY()》,本文關(guān)鍵詞 @@IDENTITY,與,SCOPE,IDENTITY,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。