sql当等INSERT之后获取主键值
生活随笔
收集整理的這篇文章主要介紹了
sql当等INSERT之后获取主键值
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
SQL ? SERVER ? 2000 ? 中的標(biāo)識(shí)值獲取函數(shù) ? ?
? IDENTITY(標(biāo)識(shí))列,也有很多人稱(chēng)之為自增列,在SQL ? Server ? 2000中,標(biāo)識(shí)列通過(guò)IDENTITY來(lái)定義,下面是與獲取最后插入記錄的標(biāo)識(shí)值有 ?
? ?
? 關(guān)的函數(shù)的一個(gè)示例說(shuō)明 ? ?
? ?
? ? ? ? ? SQL ? Server ? 中,可以使用 ? SCOPE_IDENTITY()、 ? @@IDENTITY ? 、 ? IDENT_CURRENT() ? 來(lái)取得最后插入記錄的值值,它們的區(qū)別在于: ?
? SCOPE_IDENTITY() ? 返回插入到同一作用域中的 ? IDENTITY ? 列內(nèi)的最后一個(gè) ? IDENTITY ? 值。一個(gè)作用域就是一個(gè)模塊——存儲(chǔ)過(guò)程、觸發(fā)器、函 ?
? ?
? 數(shù)或批處理。因此,如果兩個(gè)語(yǔ)句處于同一個(gè)存儲(chǔ)過(guò)程、函數(shù)或批處理中,則它們位于相同的作用域中。 ?
? @@IDENTITY ? ? ? ? ? ? ? 返回在當(dāng)前會(huì)話的所有表中生成的最后一個(gè)標(biāo)識(shí)值 ?
? IDENT_CURRENT() ? ? 返回為任何會(huì)話和任何作用域中的指定表最后生成的標(biāo)識(shí)值 ?
? 下面以一個(gè)示例來(lái)說(shuō)明它們的區(qū)別 ? ?
? ?
? -- ? a) ? 示例代碼 ? ?
? -- ? =========================================== ?
? -- ? 創(chuàng)建測(cè)試表 ?
? -- ? =========================================== ?
? USE ? tempdb ?
? GO ?
? ?
? CREATE ? TABLE ? t1(id ? int ? IDENTITY,col ? int) ?
? INSERT ? t1 ? SELECT ? 1 ?
? UNION ? ALL ? SELECT ? 2 ?
? CREATE ? TABLE ? t2(id ? int ? IDENTITY,col ? int) ?
? GO ?
? ?
? CREATE ? TRIGGER ? TR_insert_t2 ? ON ? t2 ?
? FOR ? INSERT ?
? AS ?
? ? ? ? ? INSERT ? t1 ? SELECT ? 3 ?
? GO ? ?
? ?
? -- ? =========================================== ?
? -- ? 測(cè)試三個(gè)函數(shù)..1 ?
? -- ? =========================================== ?
? INSERT ? t2 ? VALUES(1) ?
? SELECT ? [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), ?
? ? ? ? ? [@@IDENTITY]=@@IDENTITY, ?
? ? ? ? ? [IDENT_CURRENT() ? For ? t1]=IDENT_CURRENT(N't1'), ?
? ? ? ? ? [IDENT_CURRENT() ? For ? t2]=IDENT_CURRENT(N't2') ?
? ?
? /*--結(jié)果 ?
? SCOPE_IDENTITY() ? ? ? @@IDENTITY ? ? ? IDENT_CURRENT() ? For ? t1 ? ? ? ? ? IDENT_CURRENT() ? For ? t2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ------------------ ? ------------ ? -------------------------- ? ----------------------- ?
? 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3 ? ? ? ? ? ? ? ? ? ? ? ? 3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 ?
? ?
? (所影響的行數(shù)為 ? 1 ? 行) ?
? --*/ ?
? GO ?
? ?
? -- ? =========================================== ?
? -- ? 測(cè)試三個(gè)函數(shù)..2 ?
? -- ? =========================================== ?
? INSERT ? t1 ? VALUES(10) ?
? SELECT ? [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), ?
? ? ? ? ? [@@IDENTITY]=@@IDENTITY, ?
? ? ? ? ? [IDENT_CURRENT() ? For ? t1]=IDENT_CURRENT(N't1'), ?
? ? ? ? ? [IDENT_CURRENT() ? For ? t2]=IDENT_CURRENT(N't2') ?
? ?
? /*--結(jié)果 ?
? SCOPE_IDENTITY() ? ? ? @@IDENTITY ? ? ? IDENT_CURRENT() ? For ? t1 ? ? ? ? ? IDENT_CURRENT() ? For ? t2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ------------------ ? ------------ ? -------------------------- ? ----------------------- ?
? 4 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4 ? ? ? ? ? ? ? ? ? ? ? ? 4 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 ?
? ?
? (所影響的行數(shù)為 ? 1 ? 行) ?
? --*/ ?
? GO ?
? ?
? -- ? =========================================== ?
? -- ? 測(cè)試三個(gè)函數(shù)..3 ?
? -- ? ** ? 開(kāi)啟一個(gè)新連接,執(zhí)行下面的代碼 ? ** ?
? -- ? =========================================== ?
? SELECT ? [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), ?
? ? ? ? ? [@@IDENTITY]=@@IDENTITY, ?
? ? ? ? ? [IDENT_CURRENT() ? For ? t1]=IDENT_CURRENT(N't1'), ?
? ? ? ? ? [IDENT_CURRENT() ? For ? t2]=IDENT_CURRENT(N't2') ?
? ?
? /*--結(jié)果 ?
? SCOPE_IDENTITY() ? ? ? @@IDENTITY ? ? ? IDENT_CURRENT() ? For ? t1 ? ? ? ? ? IDENT_CURRENT() ? For ? t2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ------------------ ? ------------ ? -------------------------- ? ----------------------- ?
? NULL ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NULL ? ? ? ? ? ? ? ? ? 4 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &n ? ?
? ?
? --=========================================== ?
? -- ? 刪除測(cè)試環(huán)境 ?
? -- ? =========================================== ?
? DROP ? TABLE ? t1,t2 ? ?
? ?
? -- ? b) ? 代碼結(jié)果說(shuō)明 ? ?
? 從上面的代碼可以看到: ?
? IDENT_CURRENT() ? ? 始終返回指定表最后插入的標(biāo)識(shí)值 ?
? @@IDENTITY ? ? ? ? ? ? ? 返回當(dāng)前會(huì)話的標(biāo)識(shí)值,無(wú)論是否在同一個(gè)作用域,在測(cè)試1、2中,可以看到它返回的是觸發(fā)器中插入記錄的標(biāo)識(shí)值,而在 ?
? ?
? 測(cè)試3中,因?yàn)楫?dāng)前會(huì)話無(wú)插入記錄,所以返回NULL ?
? SCOPE_IDENTITY() ? 返回當(dāng)前會(huì)話同一作用域的標(biāo)識(shí)值,所以在測(cè)試1、2中,它返回的值不受觸發(fā)器的影響,而在測(cè)試3中,因?yàn)楫?dāng)前會(huì)話無(wú)插 ?
? ?
? 入記錄,所以返回NULL
? IDENTITY(標(biāo)識(shí))列,也有很多人稱(chēng)之為自增列,在SQL ? Server ? 2000中,標(biāo)識(shí)列通過(guò)IDENTITY來(lái)定義,下面是與獲取最后插入記錄的標(biāo)識(shí)值有 ?
? ?
? 關(guān)的函數(shù)的一個(gè)示例說(shuō)明 ? ?
? ?
? ? ? ? ? SQL ? Server ? 中,可以使用 ? SCOPE_IDENTITY()、 ? @@IDENTITY ? 、 ? IDENT_CURRENT() ? 來(lái)取得最后插入記錄的值值,它們的區(qū)別在于: ?
? SCOPE_IDENTITY() ? 返回插入到同一作用域中的 ? IDENTITY ? 列內(nèi)的最后一個(gè) ? IDENTITY ? 值。一個(gè)作用域就是一個(gè)模塊——存儲(chǔ)過(guò)程、觸發(fā)器、函 ?
? ?
? 數(shù)或批處理。因此,如果兩個(gè)語(yǔ)句處于同一個(gè)存儲(chǔ)過(guò)程、函數(shù)或批處理中,則它們位于相同的作用域中。 ?
? @@IDENTITY ? ? ? ? ? ? ? 返回在當(dāng)前會(huì)話的所有表中生成的最后一個(gè)標(biāo)識(shí)值 ?
? IDENT_CURRENT() ? ? 返回為任何會(huì)話和任何作用域中的指定表最后生成的標(biāo)識(shí)值 ?
? 下面以一個(gè)示例來(lái)說(shuō)明它們的區(qū)別 ? ?
? ?
? -- ? a) ? 示例代碼 ? ?
? -- ? =========================================== ?
? -- ? 創(chuàng)建測(cè)試表 ?
? -- ? =========================================== ?
? USE ? tempdb ?
? GO ?
? ?
? CREATE ? TABLE ? t1(id ? int ? IDENTITY,col ? int) ?
? INSERT ? t1 ? SELECT ? 1 ?
? UNION ? ALL ? SELECT ? 2 ?
? CREATE ? TABLE ? t2(id ? int ? IDENTITY,col ? int) ?
? GO ?
? ?
? CREATE ? TRIGGER ? TR_insert_t2 ? ON ? t2 ?
? FOR ? INSERT ?
? AS ?
? ? ? ? ? INSERT ? t1 ? SELECT ? 3 ?
? GO ? ?
? ?
? -- ? =========================================== ?
? -- ? 測(cè)試三個(gè)函數(shù)..1 ?
? -- ? =========================================== ?
? INSERT ? t2 ? VALUES(1) ?
? SELECT ? [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), ?
? ? ? ? ? [@@IDENTITY]=@@IDENTITY, ?
? ? ? ? ? [IDENT_CURRENT() ? For ? t1]=IDENT_CURRENT(N't1'), ?
? ? ? ? ? [IDENT_CURRENT() ? For ? t2]=IDENT_CURRENT(N't2') ?
? ?
? /*--結(jié)果 ?
? SCOPE_IDENTITY() ? ? ? @@IDENTITY ? ? ? IDENT_CURRENT() ? For ? t1 ? ? ? ? ? IDENT_CURRENT() ? For ? t2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ------------------ ? ------------ ? -------------------------- ? ----------------------- ?
? 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3 ? ? ? ? ? ? ? ? ? ? ? ? 3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 ?
? ?
? (所影響的行數(shù)為 ? 1 ? 行) ?
? --*/ ?
? GO ?
? ?
? -- ? =========================================== ?
? -- ? 測(cè)試三個(gè)函數(shù)..2 ?
? -- ? =========================================== ?
? INSERT ? t1 ? VALUES(10) ?
? SELECT ? [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), ?
? ? ? ? ? [@@IDENTITY]=@@IDENTITY, ?
? ? ? ? ? [IDENT_CURRENT() ? For ? t1]=IDENT_CURRENT(N't1'), ?
? ? ? ? ? [IDENT_CURRENT() ? For ? t2]=IDENT_CURRENT(N't2') ?
? ?
? /*--結(jié)果 ?
? SCOPE_IDENTITY() ? ? ? @@IDENTITY ? ? ? IDENT_CURRENT() ? For ? t1 ? ? ? ? ? IDENT_CURRENT() ? For ? t2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ------------------ ? ------------ ? -------------------------- ? ----------------------- ?
? 4 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4 ? ? ? ? ? ? ? ? ? ? ? ? 4 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 ?
? ?
? (所影響的行數(shù)為 ? 1 ? 行) ?
? --*/ ?
? GO ?
? ?
? -- ? =========================================== ?
? -- ? 測(cè)試三個(gè)函數(shù)..3 ?
? -- ? ** ? 開(kāi)啟一個(gè)新連接,執(zhí)行下面的代碼 ? ** ?
? -- ? =========================================== ?
? SELECT ? [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), ?
? ? ? ? ? [@@IDENTITY]=@@IDENTITY, ?
? ? ? ? ? [IDENT_CURRENT() ? For ? t1]=IDENT_CURRENT(N't1'), ?
? ? ? ? ? [IDENT_CURRENT() ? For ? t2]=IDENT_CURRENT(N't2') ?
? ?
? /*--結(jié)果 ?
? SCOPE_IDENTITY() ? ? ? @@IDENTITY ? ? ? IDENT_CURRENT() ? For ? t1 ? ? ? ? ? IDENT_CURRENT() ? For ? t2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ------------------ ? ------------ ? -------------------------- ? ----------------------- ?
? NULL ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NULL ? ? ? ? ? ? ? ? ? 4 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &n ? ?
? ?
? --=========================================== ?
? -- ? 刪除測(cè)試環(huán)境 ?
? -- ? =========================================== ?
? DROP ? TABLE ? t1,t2 ? ?
? ?
? -- ? b) ? 代碼結(jié)果說(shuō)明 ? ?
? 從上面的代碼可以看到: ?
? IDENT_CURRENT() ? ? 始終返回指定表最后插入的標(biāo)識(shí)值 ?
? @@IDENTITY ? ? ? ? ? ? ? 返回當(dāng)前會(huì)話的標(biāo)識(shí)值,無(wú)論是否在同一個(gè)作用域,在測(cè)試1、2中,可以看到它返回的是觸發(fā)器中插入記錄的標(biāo)識(shí)值,而在 ?
? ?
? 測(cè)試3中,因?yàn)楫?dāng)前會(huì)話無(wú)插入記錄,所以返回NULL ?
? SCOPE_IDENTITY() ? 返回當(dāng)前會(huì)話同一作用域的標(biāo)識(shí)值,所以在測(cè)試1、2中,它返回的值不受觸發(fā)器的影響,而在測(cè)試3中,因?yàn)楫?dāng)前會(huì)話無(wú)插 ?
? ?
? 入記錄,所以返回NULL
轉(zhuǎn)載于:https://www.cnblogs.com/cqsar/articles/1065861.html
總結(jié)
以上是生活随笔為你收集整理的sql当等INSERT之后获取主键值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 无法添加选择的Web部件
- 下一篇: 每天学一点flash(40) 制作走马灯