select @@identity的用法 轉


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

如果你使用存儲過程的話,將非常簡單,代碼如下: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

2. insert into 后獲得自動插入的id(select @@identity)

 

當運行完插入語句后,執行select   @@identity就可得到自動生成的id

如果是sql server 最好用select SCOPE_IDENTITY() as id

因為@@identity全局的

同類還有IDENT_CURRENT(‘table’)

IDENT_CURRENT 返回為任何會話和任何作用域中的特定表最后生成的標識值。IDENT_CURRENT 不受作用域和會話的限制,而受限於指定的表。IDENT_CURRENT 返回為任何會話和作用域中的特定表所生成的值。

@@IDENTITY 返回為當前會話的所有作用域中的任何表最后生成的標識值。

SCOPE_IDENTITY 返回為當前會話和當前作用域中的任何表最后生成的標識值

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


免責聲明!

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



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