Transact SQL 返回最新插入行的標識

2022-08-30 11:30:17 字數 1377 閱讀 8706

我們經常會遇到以下問題,即如何獲取最新插入記錄的標識?

這樣的需求很常見,下面就來介紹transact-sql提供的三種獲取標識的方法。

(1) ident_current 返回為某個會話和用域中的指定表生成的最新標識值。

(2) @@identity 返回為跨所有作用域的當前會話中的某個表生成的最新標識值。

(3) scope_identity 返回為當前會話和當前作用域中的某個表生成的最新標識值。

(1) ident_current 返回為某個會話和用域中的指定表生成的最新標識值。

語法:ident_current( 'table_name' )

說明:通過ident_current獲取的最新標識是不管會話和作用域的,也就是說無論什麼人向指定的表插入新行,它只獲取該錶最新行的標識。

示例:開啟兩個查詢視窗(兩個會話),分別在這兩個查詢視窗中寫上insert語句,並插入到同一張表。

在任意乙個查詢視窗中寫上select ident_current( 'table_name' );

結果發現select的返回值是該錶最後一次插入時生成的標識。

備註:如果你想獲取自己剛才插入的行標識,建議不要用這個方法;

如果你想獲取整個表最新插入的行標識,建議用這個方法;

(2) @@identity 返回為跨所有作用域的當前會話中的某個表生成的最新標識值。

語法:@@identity

說明:首先@@identity獲取的是當前會話,也就是說不會獲取別人插入的新行標識。它和scope_identity唯一不同的區別在於,@@identity是跨作用域的,而scope_identity是當前作用域。

示例:兩個表a和b,表a建立觸發器,一旦增加新記錄,觸發器會向表b新增一條新記錄。

向表a新增一條記錄。

獲取最新標識 select @@identity;

結果發現返回的是表b中新行的標識。

備註:如果你的當前會話中僅對乙個表新增,那麼完全可以用@@identity獲取最新插入的行標識。

如果有觸發器他插入,則不能使用該方法。

(3) scope_identity 返回為當前會話和當前作用域中的某個表生成的最新標識值。

語法:scope_identity()

說明:該方法獲取最新行標識和@@identity 類似。只是作用域是當前作用域。

示例:方法同(2);

結果發現返回值是表a新增的行標識。

示例:開啟兩個查詢視窗(兩個會話),分別在這兩個查詢視窗中寫上insert語句,並插入到同一張表。

在任意乙個查詢視窗中寫上select scope_identity();

結果發現select的返回值是該視窗所插入的那一行的標識。

備註:如果你要獲取最新插入的行標識,這個方法是最可靠的。

Transact SQL 語言概述

transact sql 語言中標準的sql 語句暢通無阻.transact sql 也有類似於sql 語言的分類,不過做了許多擴充.transact sql 語言的分類如下 珨 br 用來說明變數的命令.耨ddl,data definition language 用來建立資料庫 資料庫物件和定義其...

建立 Transact SQL 作業步驟

在物件資源管理器中,連線到 sql server 資料庫引擎例項,再展開該例項。展開 sql server 建立乙個新作業或右鍵單擊乙個現有作業,再單擊 屬性 有關建立作業的詳細資訊,請參閱建立作業。在 作業屬性 對話方塊中,單擊 步驟 頁,再單擊 新建 在 新建作業步驟 對話方塊中,鍵入作業的 步...

Transact SQL命令之批

批 在建立批的時候,應注意下面幾點 1 只有某些語句可以合併起來建立乙個批,而其它一些語句不能合併。2 不能在同乙個批中既將規則和預設繫結在列上,又使用它們。3 不能在乙個批中刪除物件又重新建立它們。4 不能在乙個批中修改乙個表並引用新列。5 不能在乙個批中定義並使用check約束。6 使用set語...