適用於:SQL Server
Azure SQL Database
Azure SQL 受控執行個體
Microsoft Fabric 中的 SQL 資料庫
IDENT_CURRENT系統函式會回傳指定資料表或視圖最後產生的身份值。 最後一個識別值可能是針對任何工作階段和任何範圍所產生的。
語法
IDENT_CURRENT( 'table_or_view' )
引數
table_or_view
回傳其身份值的表格或視圖名稱。 table_or_view 是沒有預設值的 varchar。
傳回類型
numeric(@@MAXPRECISION,0))
例外狀況
發生錯誤或呼叫端沒有檢視物件的許可權時傳回 NULL 。
在 SQL Server 中,使用者只能檢視使用者擁有或被授與某些權限之安全性實體的中繼資料。 這表示如果使用者對物件沒有任何權限,會回傳NULL像是IDENT_CURRENT中繼資料的內建函式。 如需相關資訊,請參閱 Metadata Visibility Configuration。
備註
IDENT_CURRENT與 SQL Server 2000(8.x)的身份函式SCOPE_IDENTITY相似,且 @@IDENTITY。 三個函數都會傳回最後產生的識別值。 不過,各函式定義 last 的範圍和工作階段各不相同:
-
IDENT_CURRENT回傳在任何會話及任何作用域中,特定資料表產生的最後身份值。 -
@@IDENTITY回傳目前會話中任一資料表在所有作用域中產生的最後身份值。 -
SCOPE_IDENTITY回傳目前會話中任一資料表及當前作用域所產生的最後身份值。
當值 IDENT_CURRENT 為( NULL 因為資料表從未包含過列或被截斷)時,函 IDENT_CURRENT 式會回傳種子值。
失敗的陳述式和交易可能會變更資料表的目前識別,以及建立識別欄位值中的間距。 識別值永遠不會回復,即使試圖將值插入資料表的交易未獲認可,也是如此。 例如,如果某 INSERT 個語句因 IGNORE_DUP_KEY 違規而失敗,該表格目前的身份值仍然會被增加。
當在包含 join 的視圖上使用 IDENT_CURRENT 時, NULL 回傳 。 這是因為只有一或多個聯結資料表具有識別欄位。
重要
在預測 IDENT_CURRENT 下一個產生的身份值時請謹慎。 實際產生的值可能與 IDENT_CURRENT 加 IDENT_INCR 值不同,因為其他會話的插入。
IDENT_CURRENT Fabric Data Warehouse 中該函數無法用於單位欄位。
範例
A. 回傳指定資料表最後產生的身份值
下列範例會傳回為 Person.Address 資料庫中 AdventureWorks2025 資料表產生的最後識別值。
USE AdventureWorks2022;
GO
SELECT IDENT_CURRENT ('Person.Address') AS Current_Identity;
GO
B. 比較 IDENT_CURRENT、@@IDENTITY 和 SCOPE_IDENTITY 所回傳的身份值
下列範例會顯示 IDENT_CURRENT、@@IDENTITY 和 SCOPE_IDENTITY 傳回的不同識別值。
USE AdventureWorks2022;
GO
IF OBJECT_ID(N't6', N'U') IS NOT NULL
DROP TABLE t6;
GO
IF OBJECT_ID(N't7', N'U') IS NOT NULL
DROP TABLE t7;
GO
CREATE TABLE t6(id INT IDENTITY);
CREATE TABLE t7(id INT IDENTITY(100,1));
GO
CREATE TRIGGER t6ins ON t6 FOR INSERT
AS
BEGIN
INSERT t7 DEFAULT VALUES
END;
GO
--End of trigger definition
SELECT id FROM t6;
--IDs empty.
SELECT id FROM t7;
--ID is empty.
--Do the following in Session 1
INSERT t6 DEFAULT VALUES;
SELECT @@IDENTITY;
/*Returns the value 100. This was inserted by the trigger.*/
SELECT SCOPE_IDENTITY();
/* Returns the value 1. This was inserted by the
INSERT statement two statements before this query.*/
SELECT IDENT_CURRENT('t7');
/* Returns value inserted into t7, that is in the trigger.*/
SELECT IDENT_CURRENT('t6');
/* Returns value inserted into t6. This was the INSERT statement four statements before this query.*/
-- Do the following in Session 2.
SELECT @@IDENTITY;
/* Returns NULL because there has been no INSERT action
up to this point in this session.*/
SELECT SCOPE_IDENTITY();
/* Returns NULL because there has been no INSERT action
up to this point in this scope in this session.*/
SELECT IDENT_CURRENT('t7');
/* Returns the last value inserted into t7.*/