IDENT_CURRENT (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceDatabase SQL di Microsoft Fabric

Fungsi IDENT_CURRENT sistem mengembalikan nilai identitas terakhir yang dihasilkan untuk tabel atau tampilan tertentu. Nilai identitas terakhir yang dihasilkan dapat untuk sesi apa pun dan cakupan apa pun.

Konvensi sintaks transact-SQL

Sintaks

IDENT_CURRENT( 'table_or_view' )

Argumen

table_or_view

Nama tabel atau tampilan yang nilai identitasnya dikembalikan. table_or_view adalah varchar, tanpa default.

Tipe pengembalian

numerik(@@MAXPRECISION,0))

Pengecualian

NULL Mengembalikan kesalahan atau jika penelepon tidak memiliki izin untuk melihat objek.

Di SQL Server, pengguna hanya dapat melihat metadata dari securables yang dimiliki pengguna atau tempat pengguna telah diberikan izin. Ini berarti fungsi bawaan yang memancarkan metadata seperti dapat IDENT_CURRENT dikembalikan NULL jika pengguna tidak memiliki izin pada objek tersebut. Untuk informasi selengkapnya, lihat Konfigurasi Visibilitas Metadata.

Keterangan

IDENT_CURRENTmirip dengan fungsi SCOPE_IDENTITY identitas SQL Server 2000 (8.x) dan @@IDENTITY. Ketiga fungsi mengembalikan nilai identitas yang dihasilkan terakhir. Namun, cakupan dan sesi di mana terakhir didefinisikan dalam masing-masing fungsi ini berbeda:

  • IDENT_CURRENT Mengembalikan nilai identitas terakhir yang dihasilkan untuk tabel tertentu dalam setiap sesi dan cakupan apa pun.
  • @@IDENTITY Mengembalikan nilai identitas terakhir yang dihasilkan untuk tabel mana pun dalam sesi saat ini, di semua cakupan.
  • SCOPE_IDENTITY Mengembalikan nilai identitas terakhir yang dihasilkan untuk tabel apa pun dalam sesi saat ini dan cakupan saat ini.

Ketika IDENT_CURRENT nilai tersebut ( NULL karena tabel tidak pernah berisi baris atau telah dipotong), fungsi mengembalikan IDENT_CURRENT nilai benih.

Pernyataan dan transaksi yang gagal dapat mengubah identitas saat ini untuk tabel dan membuat celah dalam nilai kolom identitas. Nilai identitas tidak pernah digulung balik meskipun transaksi yang mencoba memasukkan nilai ke dalam tabel tidak dilakukan. Misalnya, jika INSERT pernyataan gagal karena IGNORE_DUP_KEY pelanggaran, nilai identitas saat ini untuk tabel masih dinaikkan.

Saat digunakan IDENT_CURRENT pada tampilan yang berisi join, dikembalikan. NULL Ini terlepas dari apakah hanya satu atau lebih dari satu tabel yang bergabung memiliki kolom Identitas.

Penting

Berhati-hatilah saat memprediksi IDENT_CURRENT nilai identitas berikutnya yang dihasilkan. Nilai yang dihasilkan secara aktual bisa berbeda dari IDENT_CURRENT plus IDENT_INCR karena sisipan yang dilakukan oleh sesi lain.

Fungsi ini IDENT_CURRENT tidak tersedia untuk kolom identitas di Fabric Data Warehouse.

Contoh

J. Mengembalikan nilai identitas terakhir yang dihasilkan untuk tabel tertentu

Contoh berikut mengembalikan nilai identitas terakhir yang dihasilkan untuk Person.Address tabel dalam AdventureWorks2025 database.

USE AdventureWorks2022;  
GO  
SELECT IDENT_CURRENT ('Person.Address') AS Current_Identity;  
GO  

B. Bandingkan nilai identitas yang dikirimkan oleh IDENT_CURRENT, @@IDENTITY , dan SCOPE_IDENTITY

Contoh berikut menunjukkan berbagai nilai identitas yang dikembalikan oleh IDENT_CURRENT, , @@IDENTITYdan 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.*/