none
請教一個關於select @@IDENTITY語法的問題 RRS feed

  • 問題

  • 請問select @@IDENTITY此語法,是否一定會取淂現在新增的自動編號值,在一個例如無名這種同一時間,資料量新增迅速的站台上?

     

    謝謝!

    2007年11月24日 上午 05:30

解答

  • 如果一次新增多筆資料,自然會產生多個自動編號的識別值,而此時 @@IDENTITY 只會傳回最後一個產生的識別值,也就是說,如果所執行的 T-SQL 陳述式會引發一或多筆新增的資料,那麼在該 T-SQL 陳述式之後,馬上著呼叫 @@IDENTITY 會傳回最後一個識別值。

     

    就上面的說明來,有幾點是你要考慮的,是否為同一個 T-SQL 交易?是否會新增多筆資料?

    2007年11月24日 上午 10:38
    版主
  • 簡單的說,使用者 A 會執行你上面所說的 T-SQL,使用者 B 也會執行的話,那在新增完資料之後,A 跟 B 所取得的識別碼的值會不一樣,因為他們兩個人的工作階段(Session)不同。
    2007年11月24日 下午 12:00
    版主

所有回覆

  • 如果一次新增多筆資料,自然會產生多個自動編號的識別值,而此時 @@IDENTITY 只會傳回最後一個產生的識別值,也就是說,如果所執行的 T-SQL 陳述式會引發一或多筆新增的資料,那麼在該 T-SQL 陳述式之後,馬上著呼叫 @@IDENTITY 會傳回最後一個識別值。

     

    就上面的說明來,有幾點是你要考慮的,是否為同一個 T-SQL 交易?是否會新增多筆資料?

    2007年11月24日 上午 10:38
    版主
  • 您好,謝謝您的回答,若是像以下的寫法,但該頁由於同一時間會去執行的人數眾多(如無名中同一時間新增文章的人應該會很多...),這樣取到的NID是否會正確?因為在該句之後,還需要用到NID值去新增其他table資料,怕取到的是後面最新某筆的自動編號,謝謝您!!

     

    insert into article(ID,content,dates) values(a,b,c);select @@IDENTITY as NID

     

    Troy Lee

    2007年11月24日 上午 11:36
  • 簡單的說,使用者 A 會執行你上面所說的 T-SQL,使用者 B 也會執行的話,那在新增完資料之後,A 跟 B 所取得的識別碼的值會不一樣,因為他們兩個人的工作階段(Session)不同。
    2007年11月24日 下午 12:00
    版主
  • 了解,謝謝您~~

    2007年11月24日 下午 02:11