SQL Server 插入數據后獲得自增主鍵值


通過SQLServer系統自帶函數獲取

String sql = "insert into goods values('" + TextBox1.Text + "'," + TextBox2.Text + ",0," + TextBox3.Text + ",'','" + DropDownList1.SelectedItem.Text + "','" + Session["username"].ToString() + "',0,'" + TextBox4.Text + "','未通過');select SCOPE_IDENTITY()";

SqlConnection conn = new SqlConnection(s);
SqlCommand cmd = new SqlCommand(sql,conn);
conn.Open();
int ids= Convert.ToInt32(cmd.ExecuteScalar());

 

相關內容:

SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY,它們都返回插入到 IDENTITY 列中的值。 
IDENT_CURRENT 返回為任何會話和任何作用域中的特定表最后生成的標識值。IDENT_CURRENT 不受作用域和會話的限制,而受限於指定的表。IDENT_CURRENT 返回為任何會話和作用域中的特定表所生成的值。
@@IDENTITY 返回為當前會話的所有作用域中的任何表最后生成的標識值。
SCOPE_IDENTITY 返回為當前會話和當前作用域中的任何表最后生成的標識值
SCOPE_IDENTITY 和 @@IDENTITY 返回在當前會話中的任何表內所生成的最后一個標識值。但是,SCOPE_IDENTITY 只返回插入到當前作用域中的值;@@IDENTITY 不受限於特定的作用域。

例如,有兩個表 T1 和 T2,在 T1 上定義了一個 INSERT 觸發器。當將某行插入 T1 時,觸發器被激發,並在 T2 中插入一行。此例說明了兩個作用域:一個是在 T1 上的插入,另一個是作為觸發器的結果在 T2 上的插入。

假設 T1 和 T2 都有 IDENTITY 列,@@IDENTITY 和 SCOPE_IDENTITY 將在 T1 上的 INSERT 語句的最后返回不同的值。

@@IDENTITY 返回插入到當前會話中任何作用域內的最后一個 IDENTITY 列值,該值是插入 T2 中的值。

SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值,該值是發生在相同作用域中的最后一個 INSERT。如果在作用域中發生插入語句到標識列之前喚醒調用 SCOPE_IDENTITY() 函數,則該函數將返回 NULL 值。

而IDENT_CURRENT('T1') 和 IDENT_CURRENT('T2') 返回的值分別是這兩個表最后自增的值。 

附:使用@IDENTITY基本知識 

1. IDENTITY 列不能由用戶直接更新,它是由系統自動維護的。 

2.該列數據類型必須為數值型:int, smallint, tinyint, decimal or numeric with scale 0。 

3.該列不能為 null。 

4.不能在該列上設置缺省值。 

5.遞增量只能為整形(比如:1,2,-3)。不能為小數,也不能為0。 

6.基值(種子值 seed)可以由用戶設置,缺省值為1。 

理解 @@IDENTITY 

@@IDENTITY 返回最后一個插入 IDENTITY 的值,這些操作包括:INSERT, SELECT INTO,或者 bulk copy。如果在給沒有 IDENTITY 列的其他表插入記錄,系統將其置為 null。如果有多行記錄插入到 IDENTITY 表中,@@IDENTITY 表示最后一個產生的值。如果觸發了某個觸發器,並且這個觸發器執行向另一個帶有 IDENTITY 列的表的插入操作,@@IDENTITY 將返回這個由觸發器產生的值。如果這個觸發器插入的表中不包含 IDENTITY 列,那么 @@IDENTITY 將為 null。如果插入操作失敗,@@IDENTITY 值依然會增加,所以 IDENTITY 不保證數據的連續性。 

@@IDENTITY 是當前連接的全局變量,只對當前連接有效。也就是說,如果斷開連接再重新連接后,@@IDENTITY 為 null。以 ADO 來說,@@IDENTITY 在 Connection 對象打開和關閉期間是有意義的,即在 Connection 對象的存在范圍內有效。在 MTS 組件中,從打開連接到顯式的關閉連接(Connection.Close)或者到調用了 SetAbort,SetComplete之前,在這期間,@@IDENTITY 有意義。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM