SQL Server關於自增標識

2022-06-26 20:42:13 字數 3636 閱讀 8563

作用域就是乙個模組——儲存過程、觸發器、函式或批處理。因此,如果兩個語句處於同乙個儲存過程、函式或批處理中,則它們位於相同的作用域中。

關於批處理:sql 查詢分析器裡go語句以前的sql語句應該是乙個批處理

會話乙個使用者連線產生的所有上下文資訊。乙個查詢分析器視窗就是乙個會話

@@identity返回為跨所有作用域的當前會話中的任何表生成的最後乙個標識值。

如果語句未影響任何包含標識列的表,則@@identity 返回null。如果插入了多個行,生成了多個標示值,則@@identity 將返回最後生成的標示值。如果語句觸發了乙個或多個觸發器,該觸發器又執行了生成標示值的插入操作,那

麼,在語句執行後立即呼叫。

@@identity 將返回觸發器生成的最後乙個標識值。 如果對包含標識列的表執行插入操作後觸發了觸發器,並且觸發器對另乙個沒有標識列的表執行了插入操作,則 @@identity 將返回第一次插入的標識

值。 出現 insert 或 select into 語句失敗或大容量複製失敗,或者事務被回滾的情況時,@@identity 值不會恢復為以前的設定。

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

如果 ident_current 值為 null(因為表從未包含行或已被截斷),ident_current 函式將返回種子值。

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

只返回插入到當前作用域中的值;@@identity 不受限於特定的作用域。

/*

********  準備基礎資料  **************

********  會話1  **************

*/insert dbo.tb1 default

values

select

@@identity

/*返回100

實際上,這是觸發器返回的結果

*/select

scope_identity

();/*

返回1在查詢前,由第乙個insert語句返回

*/select ident_current('

tb2')/*

返回100

返回插入到tb2的值,在查詢前由觸發器插入

*/select ident_current('

tb1')/*

返回1返回插入到tb1的值,在查詢前由insert語句插入

********  會話2  **************

*/select

@@identity

/*返回null

因為查詢前沒有insert動作

*/select

scope_identity

()/*

返回null

因為在當前作用域當前會話中沒有insert動作

*/select ident_current('

tb2')/*

返回100

返回tb2的最後乙個插入值

為了比較好理解一點,我們可以把唯一帶引數的ident_current函式看作是「老母雞」,它始終管著自己的小雞,不管外面如何變化,它死死盯著自家小雞的變化。而不帶引數的ident_current@@identity好像是執法的「城管」,把各種外面的「閒事」都攬到自己懷裡,其中,從名字上理解,帶範圍的ident_current更像是現場執法的「專項城管」,任意人都可以管,只是權力受到當前「專項內容」(即作用域)的限制,不屬「專項內容的」,它管不了。而@@identity則像是全天候的「萬能城管」,什麼都逃不過它的魔爪,什麼都要攬到自己懷裡

如果想獲取跨任何會話或作用域的某個表的最新標識值,請使用ident_current,它像個「老母雞」。

如果想獲取當前會話和當前作用域的任何表的最新標識值,請使用scope_identity,它像個「專項城管」。

如果想獲取當前會話中任何作用域的任何表的最新標識值,請使用@@identity,它像個「萬能城管」。

ident_incr()返回在建立表或檢視的標識列時指定的遞增值。

ident_seed()返回在表或檢視中建立標識列時指定的原始種子值。 使用 dbcc checkident 更改標識列的當前值不會更改此函式返回的值。

自增標識變更

一般我們的用法如下 檢視且如有必要更正當前標識值 dbcc checkident table name 檢視當前標識值,即使有錯也不檢視更正 dbcc checkident table name noreseed 指定新的標識值 dbcc checkident table name reseed,n...

sql server 重置自增

delete tb where id 100 dbcc checkident tb reseed,1 dbcc checkident tb reseed 其結果將 tb 表的自增種子設定為當前表裡標識列的最大值 再次增加資料就會繼續那個數字了 實測 建立測試環境 if object id tb is...

自增標識的相關問題

自增標識的相關問題 delphi windows sdk api 我做了張登錄檔,設有id為標識,每次自增.在註冊的時候,我需要填寫密碼和使用者名稱,執行是提示必須給 id 賦值.那我該怎樣解決這個問題.謝謝指教 幫忙看看.請問大家.我表內設定的自增標識,該怎麼處理啊 新增時給它賦值,提示說不能加顯...