我們經常會遇到以下問題,即如何獲取最新插入記錄的標識?
這樣的需求很常見,下面就來介紹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語...