国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

SQL Server返回最后一個標識值的三個函數:IDENT_CURRENT、@@IDENTITY、SCOPE_IDENTITY

2024-08-31 00:54:37
字體:
來源:轉載
供稿:網友
<轉>SQL Server返回最后一個標識值的三個函數:IDENT_CURRENT、@@IDENTITY、SCOPE_IDENTITY

  MSDN對官方解釋:這三個函數都返回最后生成的標識值。 但是,上述每個函數中定義的“最后”的作用域和會話有所不同。

  1、IDENT_CURRENT 返回為某個會話和當前作用域中的指定表生成的最新標識值。

  如果 IDENT_CURRENT 值為 NULL(因為表從未包含行或已被截斷),IDENT_CURRENT 函數將返回種子值。

  2、@@IDENTITY 返回為跨所有作用域的當前會話中的某個表生成的最新標識值。

  如果語句未影響任何包含標識列的表,則 @@IDENTITY 返回 NULL。 如果插入了多個行,生成了多個標識值,則 @@IDENTITY 將返回最后生成的標識值。 如果語句觸發了一個或多個觸發器,該觸發器又執行了生成標識值的插入操作,那么,在語句執行后立即調用,@@IDENTITY 將返回觸發器生成的最后一個標識值。 如果對包含標識列的表執行插入操作后觸發了觸發器,并且觸發器對另一個沒有標識列的表執行了插入操作,則 @@IDENTITY 將返回第一次插入的標識值。 出現 INSERT 或 SELECT INTO 語句失敗或大容量復制失敗,或者事務被回滾的情況時,@@IDENTITY 值不會恢復為以前的設置。

  3、SCOPE_IDENTITY 返回為當前會話和當前作用域中的某個表生成的最新標識值。

  SCOPE_IDENTITY 只返回插入到當前作用域中的值;@@IDENTITY 不受限于特定的作用域。

  更詳細的介紹,請看MSDN(http://msdn.microsoft.com/zh-cn/library/ms175098.aspx)

  我們看MSDN提供的例子:

  準備基礎數據:

/*********  返回最后一相標識值的三個方法  ***************//********* 3w@live.cn 邀月 ***************//*********  準備基礎數據  ***************/USE TestDb2;GOIF OBJECT_ID(N'tb1', N'U') IS NOT NULLDROP TABLE tb1;GOIF OBJECT_ID(N'tb2', N'U') IS NOT NULLDROP TABLE tb2;GOCREATE TABLE tb1(id int IDENTITY);CREATE TABLE tb2(id int IDENTITY(100,1));GOCREATE TRIGGER tb1Insert ON tb1 FOR INSERTASBEGININSERT tb2 DEFAULT VALUESEND;GOSELECT id FROM tb1;--此時,IDs是EmptySELECT id FROM tb2;--此時,IDs是Empty   開始會話1:/*********  會話1  ***************/INSERT tb1 DEFAULT VALUES;SELECT @@IDENTITY;/*返回100實際上,這是觸發器返回的結果*/SELECT SCOPE_IDENTITY();/*返回1在查詢前,由第一個Insert語句返回*/SELECT IDENT_CURRENT('tb2');/*返回100返回插入到tb2的值,在查詢前由觸發器插入*/SELECT IDENT_CURRENT('tb1');/*返回1返回插入到tb1的值,在查詢前由Insert語句插入*/  另外開始新的會話2/*********  會話2  ***************/SELECT @@IDENTITY;/*返回Null,因為查詢前沒有Insert動作*/SELECT SCOPE_IDENTITY();/*返回Null因為在當前作用域當前會話中沒有Insert動作*/SELECT IDENT_CURRENT('tb2');/*返回100返回tb2的最后一個插入值*/

  在此補充一下:當前作用域是指當前SQL語句、當前存儲過程、或當前觸發器。

  為了比較好理解一點,我們可以把唯一帶參數的IDENT_CURRENT函數看作是“老母雞”,它始終管著自己的小雞,不管外面如何變化,它死死盯著自家小雞的變化。而不帶參數的SCOPE_IDENTITY和@@IDENTITY好像是執法的“城管”,把各種外面的“閑事”都攬到自己懷里,其中,從名字上理解,帶范圍的SCOPE_IDENTITY更像是現場執法的“專項城管”,任意人都可以管,只是權力受到當前“專項內容”(即作用域)的限制,不屬“專項內容的”,它管不了。而@@IDENTITY則像是全天候的“萬能城管”,什么都逃不過它的魔爪,什么都要攬到自己懷里。不知道這樣您好理解點沒?

小結:簡言之,

如果想獲取跨任何會話或作用域的某個表的最新標識值,請使用IDENT_CURRENT,它像個“老母雞”。

如果想獲取當前會話和當前作用域的任何表的最新標識值,請使用SCOPE_IDENTITY,它像個“專項城管”。

如果想獲取當前會話中任何作用域的任何表的最新標識值,請使用@@IDENTITY,它像個“萬能城管”。

邀月注:本文版權由邀月和博客園共同所有,轉載請注明出處。助人等于自助!3w@live.cn
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 瓦房店市| 通州区| 浠水县| 罗山县| 延川县| 舟曲县| 中西区| 泰兴市| 呼玛县| 芮城县| 抚州市| 桐庐县| 外汇| 武宣县| 乌兰察布市| 长岭县| 隆安县| 宾阳县| 诸城市| 肥西县| 台州市| 镇原县| 荔波县| 太和县| 斗六市| 昌江| 会昌县| 依兰县| 阳江市| 宾阳县| 麻阳| 玛纳斯县| 靖边县| 厦门市| 西乌| 宁远县| 永吉县| 神木县| 峨山| 大方县| 抚宁县|