轉(zhuǎn)載地址:http://blog.163.com/zhangqian_sms/blog/static/544483382008925112539620/
用select @@identity得到上一次插入記錄時(shí)自動(dòng)產(chǎn)生的ID
如果你使用存儲(chǔ)過(guò)程的話,將非常簡(jiǎn)單,代碼如下:SET @NewID=@@IDENTITY
說(shuō)明:
在一條 INSERT、SELECT INTO 或大容量復(fù)制語(yǔ)句完成后,@@IDENTITY 中包含此語(yǔ)句產(chǎn)生的最后的標(biāo)識(shí)值。若此語(yǔ)句沒(méi)有影響任何有標(biāo)識(shí)列的表,則 @@IDENTITY 返回 NULL。若插入了多個(gè)行,則會(huì)產(chǎn)生多個(gè)標(biāo)識(shí)值,@@IDENTITY 返回最后產(chǎn)生的標(biāo)識(shí)值。如果此語(yǔ)句激發(fā)一個(gè)或多個(gè)執(zhí)行產(chǎn)生標(biāo)識(shí)值的插入操作的觸發(fā)器,則語(yǔ)句執(zhí)行后立即調(diào)用 @@IDENTITY 將返回由觸發(fā)器產(chǎn)生的最后的標(biāo)識(shí)值。若 INSERT 或 SELECT INTO 語(yǔ)句失敗或大容量復(fù)制失敗,或事務(wù)被回滾,則 @@IDENTITY 值不會(huì)還原為以前的設(shè)置。
在返回插入到表的 @@IDENTITY 列的最后一個(gè)值方面,@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 函數(shù)類似。
@@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í)值。有關(guān)更多信息,請(qǐng)參見(jiàn) IDENT_CURRENT。
示例
下面的示例向帶有標(biāo)識(shí)列的表中插入一行,并用 @@IDENTITY 顯示在新行中使用的標(biāo)識(shí)值。
INSERT INTO infoclass (infoclass) VALUES ('Accountant')
這時(shí)我們插入一條記錄,下面我們使用語(yǔ)句得到標(biāo)識(shí)值:
SELECT @@IDENTITY AS 'Identity'
我的表infoclass中有個(gè)ID字段,它原的值是14插入新的記錄后自動(dòng)產(chǎn)生了值15,因些,上面命令執(zhí)行后返回值:15。
下面說(shuō)說(shuō)如何在.net中得到插入記錄后的ID值。
因?yàn)镾qlserver為我們提供了多重查詢的功能,這大大方便了我們的工作。請(qǐng)看:
Dim sql As String = "INSERT INTO jobs (job_desc,min_lvl,max_lvl) VALUES ('A new job', 25, 100);" & _
"SELECT job_id FROM jobs WHERE job_id = @@IDENTITY"
Dim cmd As New SqlCommand(sql, cn)
上面可以看到,SqlCommand可以執(zhí)行多條語(yǔ)句,各語(yǔ)句之間用“;"分隔。第一條執(zhí)行插入,第二條則返回最后插入記錄的ID值,因?yàn)椴樵兎祷氐氖菃瘟械模⑶?#20540;也是唯一的,所以可以使用ExecuteScalar獲得:
Dim jobId As Integer = CInt(cmd.ExecuteScalar())A
2. insert into 后獲得自動(dòng)插入的id(select @@identity)
當(dāng)運(yùn)行完插入語(yǔ)句后,執(zhí)行select @@identity就可得到自動(dòng)生成的id
如果是sql server 最好用select SCOPE_IDENTITY() as id
因?yàn)锧@identity全局的
同類還有IDENT_CURRENT(‘table’)
IDENT_CURRENT 返回為任何會(huì)話和任何作用域中的特定表最后生成的標(biāo)識(shí)值。IDENT_CURRENT 不受作用域和會(huì)話的限制,而受限于指定的表。IDENT_CURRENT 返回為任何會(huì)話和作用域中的特定表所生成的值。
@@IDENTITY 返回為當(dāng)前會(huì)話的所有作用域中的任何表最后生成的標(biāo)識(shí)值。
SCOPE_IDENTITY 返回為當(dāng)前會(huì)話和當(dāng)前作用域中的任何表最后生成的標(biāo)識(shí)值
SCOPE_IDENTITY 和 @@IDENTITY 返回在當(dāng)前會(huì)話中的任何表內(nèi)所生成的最后一個(gè)標(biāo)識(shí)值。但是,SCOPE_IDENTITY 只返回插入到當(dāng)前作用域中的值;@@IDENTITY 不受限于特定的作用域。
zhuanzai新聞熱點(diǎn)
疑難解答
圖片精選