日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

SQL获取刚插入的记录的自动增长列ID的值

發布時間:2025/3/20 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL获取刚插入的记录的自动增长列ID的值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

假設表結構如下:

CREATE TABLE TestTable

(

  id int identity,

  CreatedDate datetime

)

?

SQL2005獲得新增行的自動增長列的語句如下:

insert into TestTable (CreatedDate)? output? inserted.id? values (getdate())

?

output 是sql server2005的新特性,可以從數據修改語句中返回輸出,可以看作是“返回結果的DML”

2005之后 Insert,Delete,Update語句 均支持Output語句。

在Output語句中可以引用inserted和deleted。使用方法同觸發器類似。

該方法最大弊端就是需要指定主鍵。output Inserted.要返回的值。

?

帶有output的insert語句.

?

@@identity只能返回當前會話最后生產的標識列.? 如果一次性插入多條語句的話. 需要返回這些自動生產的標識列. 那么outpu就派上用場了.

declare @temp table(k int, v nvarchar(200)) insert into t1(datacol) output inserted.keycol, inserted.datacol into @temp select lastname from TSQLFundamentals2008.hr.Employees where country='uk' ? select * from @temp

帶有output的delete語句和update語句也大同小異.

delete語句能操作deleted臨時表. 而update的本質是delete和insert一次能操作inserted和updated兩張表.

?

?

帶有output的merge子句.

在merge子句的output輸出中可以調用@action函數. 會返回一個代表相應操作的字符串(insert, update, delete)

?

SQL2000獲得新增行的自動增長列的語句如下:

insert into TestTable (CreatedDate)? values (getdate())

select @@IDENTITY

?

用select @@identity得到上一次插入記錄時自動產生的ID

如果你使用存儲過程的話,將非常簡單,代碼如下:SET @NewID=@@IDENTITY

?

@@identity使用注意事項


  我們要慎用@@IDENTITY,原因是 @@IDENTITY 它總是獲取最后一條變更數據的自增字段的值,
而忽略了進行變更操作所在的范圍約束。比如,我有表 A 和表 B 兩個表,現在我在表 A 上定義了一個Insert觸發器,當在表 A 中插入一條數據時,自動在表 B 也插入一條數據。此時,大家注意,有兩個原子操作:在A中插入一條數據, 接著在B中隨后插入一條數據。

  現在我們想下,假設上面表 A 和表 B 都有IDENTITY自增域,那么我們在表 A 插入一條數據后,使用了 SELECT @@IDENTITY 輸出時,輸出的到底是 A 還是 B 的自增域的值呢? 答案很明顯,是誰最后插入就輸出誰,那么就是 B 了。于是,我本意是想得到 A 的自增域值,結果得到了 B 的自增域值,一只 BUG 隨之誕生,搞不好還會影響到整個系統數據的混亂。

  因此,對于這種情況,建議大家慎用 @@IDENTITY,而盡量采用?SCOPE_IDENTITY()?函數替換之。SCOPE_IDENTITY() 也是得到最后一條自增域的值,但是它是僅限在一個操作范圍之內,而不@@IDENTITY 是取全局操作的最后一步操作所產生的自增域的值的。

?

SCOPE_IDENTITY 和 @@IDENTITY 返回在當前會話中的任何表內所生成的最后一個標識值。但是,SCOPE_IDENTITY 只返回插入到當前作用域中的值;@@IDENTITY 不受限于特定的作用域。

?

?

?

在C#中使用ExecuteScalar()方法獲得第一行第一列的值(即自增id):

object val = cmd.ExecuteScalar();

轉載于:https://www.cnblogs.com/TBW-Superhero/p/5510955.html

總結

以上是生活随笔為你收集整理的SQL获取刚插入的记录的自动增长列ID的值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。