sql server 2000 @@identity、Scope_identity()、ident_current的區別

來源:互聯網
上載者:User

     今天遇到一個問題,最後發現是對@@identity、Scope_identity()、ident_current瞭解不夠造成的,寫下來給像我一樣的新手提示一下

     最初有兩個表table1、table2,預存程序pro1實現這樣的邏輯,向table1插入一行資料之後,用@@identtity取得identity列剛插入的值,插入table2,一直運行正常。

     後來由於業務變化,增加了table3、table4,於是想當然的在table1定義了一個insert觸發器,當table1插入一行時,激發觸發器在table3插入一行,同時用scope_identity()取得table3剛插入的identity列的值,然後把該identtity列的值插入table4;

     然後問題出現了,每次執行預存程序pro1之後,table1、table3、table4裡插入的資料都正常,但是插入table2的資料卻不是table1的identity列的值,而是table3的identity列的值

     最後查資料發現問題在於@@identity、Scope_identity()是有區別的(沒區別就沒有必要弄兩個了,當初真是暈呀,呵呵);兩者都是用來返回identity值得

     scope_identity()

          返回當前會話同一範圍中的任意表產生的最後一個identity值

     @@identity

          返回當前會話插入到任意表產生的最後一個identity值(不受範圍限制)

     ident_current

          返回任意會話和範圍中的特定表所產生的最後一個identity值(不受會話和範圍限制,但是限制於特定表)

 

     範圍:一個模組就是一個範圍;一個預存程序、一個觸發器、一個批處理或者一個函數都是一個獨立的範圍。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.