MSSQL如何獲得新插入記錄的ID值

2021-04-12 16:52:18 字數 2530 閱讀 5420

如果你使用儲存過程的話,將非常簡單,**如下:set @newid=@@identity

說明:在一條 insert、select into 或大容量複製語句完成後,@@identity 中包含此語句產生的最後的標識值。若此語句沒有影響任何有標識列的表,則 @@identity 返回 null。若插入了多個行,則會產生多個標識值,@@identity 返回最後產生的標識值。如果此語句激發乙個或多個執行產生標識值的插入操作的觸發器,則語句執行後立即呼叫 @@identity 將返回由觸發器產生的最後的標識值。若 insert 或 select into 語句失敗或大容量複製失敗,或事務被回滾,則 @@identity 值不會還原為以前的設定。

在返回插入到表的 @@identity 列的最後乙個值方面,@@identity、scope_identity 和 ident_current 函式類似。

@@identity 和 scope_identity 將返回在當前會話的所有表中生成的最後乙個標識值。但是,scope_identity 只在當前作用域內返回值,而 @@identity 不限於特定的作用域。

ident_current 不受作用域和會話的限制,而受限於指定的表。ident_current 返回任何會話和任何作用域中為特定表生成的標識值。有關更多資訊,請參見 ident_current。

示例下面的示例向帶有標識列的表中插入一行,並用 @@identity 顯示在新行中使用的標識值。

insert into infoclass (infoclass) values (''accountant'')

這時我們插入一條記錄,下面我們使用語句得到標識值:

select @@identity as ''identity''

我的表infoclass中有個id欄位,它原的值是14插入新的記錄後自動產生了值15,因些,上面命令執行後返回值:15。

下面說說如何在.net中得到插入記錄後的id值。

因為sqlserver為我們提供了多重查詢的功能,這大大方便了我們的工作。請看:

dim sql as string = "insert into jobs (job_desc,min_lvl,max_lvl) values (''a new job'', 25, 100);" & _

"select job_id from jobs where job_id = @@identity"

dim cmd as new sqlcommand(sql, cn)

上面可以看到,sqlcommand可以執行多條語句,各語句之間用「;"分隔。第一條執行插入,第二條則返回最後插入記錄的id值,因為查詢返回的是單列的,並且值也是唯一的,所以可以使用executescalar獲得:

dim jobid as integer = cint(cmd.executescalar())a 

附錄:transact-sql   參考    

@@identity  

返回最後插入的標識值。  

語法  

@@identity  

返回型別  

numeric  

注釋  

在一條   insert、select   into   或大容量複製語句完成後,@@identity   中包含此語句產生的最後的標識值。若此語句沒有影響任何有標識列的表,則   @@identity   返回   null。若插入了多個行,則會產生多個標識值,@@identity   返回最後產生的標識值。如果此語句激發乙個或多個執行產生標識值的插入操作的觸發器,則語句執行後立即呼叫   @@identity   將返回由觸發器產生的最後的標識值。若   insert   或   select   into   語句失敗或大容量複製失敗,或事務被回滾,則   @@identity   值不會還原為以前的設定。  

在返回插入到表的   @@identity   列的最後乙個值方面,@@identity、scope_identity   和   ident_current   函式類似。    

@@identity   和   scope_identity   將返回在當前會話的所有表中生成的最後乙個標識值。但是,scope_identity   只在當前作用域內返回值,而   @@identity   不限於特定的作用域。  

ident_current   不受作用域和會話的限制,而受限於指定的表。ident_current   返回任何會話和任何作用域中為特定表生成的標識值。有關更多資訊,請參見   ident_current。  

示例  

下面的示例向帶有標識列的表中插入一行,並用   @@identity   顯示在新行中使用的標識值。  

insert   into   jobs   (job_desc,min_lvl,max_lvl)  

values   ('accountant',12,125)  

select   @@identity   as   'identity'  

請參見  

create   table  

ident_current  

insert  

scope_identity  

select

MYSQL如何獲得剛插入記錄的ID值。

關鍵部分 1。mysql使用sql函式last insert id 獲得剛剛插入的auto increace欄位的id值。必須前一sql為一insert語句,如果是其他語句,返回的id值為零。2。使用command物件的時候,注意不能關閉物件後再用select last insert id 函式,這...

mysql 如何高效獲取新插入的最後記錄

在mysql中,使用auto increment型別的id欄位作為表的主鍵,並用它作為其他表的外來鍵,形成 主從表結構 這是資料庫設計中常見的用法。但是在具體生成id的時候,我們的操作順序一般是 先在主表中插入記錄,然後獲得自動生成的id,以它為基礎插入從表的記錄。這裡面有個困難,就是插入主表記錄後...

ms sql 一次插入多條記錄的語句

有的時候我們需要一次像資料庫中新增多條記錄,我們可以使用下面的語句來實現 新增一條記錄 insert into tablename col1,col2,col3 values 1,2,3 新增多條記錄 insert into tablename col1,col2,col3 select 3,4,5...