Bagikan melalui


IDENT_CURRENT (T-SQL)

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

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
Adalah nama tabel atau tampilan yang nilai identitasnya dikembalikan. table_or_view adalah varchar, tanpa default.

Jenis Kembalian

numerik(@@MAXPRECISION,0))

Pengecualian

Mengembalikan NULL pada 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 bahwa fungsi bawaan yang memancarkan metadata seperti IDENT_CURRENT dapat mengembalikan NULL jika pengguna tidak memiliki izin apa pun pada objek. Untuk informasi selengkapnya, lihat Konfigurasi Visibilitas Metadata.

Keterangan

IDENT_CURRENT mirip dengan fungsi identitas SQL Server 2000 (8.x) SCOPE_IDENTITY 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 sesi apa pun dan cakupan apa pun.
  • @@IDENTITY mengembalikan nilai identitas terakhir yang dihasilkan untuk tabel apa 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 nilai IDENT_CURRENT adalah NULL (karena tabel belum pernah berisi baris atau telah dipotong), fungsi IDENT_CURRENT mengembalikan nilai seed.

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 pernyataan INSERT gagal karena pelanggaran IGNORE_DUP_KEY, nilai identitas saat ini untuk tabel masih dinaikkan.

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

Penting

Berhati-hatilah saat menggunakan IDENT_CURRENT untuk memprediksi nilai identitas yang dihasilkan berikutnya. Nilai aktual yang dihasilkan mungkin berbeda dari IDENT_CURRENT ditambah IDENT_INCR karena penyisipan yang dilakukan oleh sesi lain.

Contoh

J. Mengembalikan nilai identitas terakhir yang dihasilkan untuk tabel tertentu

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

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

B. Membandingkan nilai identitas yang dikembalikan 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.*/  

Lihat Juga

@@IDENTITY (T-SQL)
SCOPE_IDENTITY (T-SQL)
IDENT_INCR (T-SQL)
IDENT_SEED (T-SQL)
Ekspresi (Transact-SQL)
Fungsi Sistem (Transact-SQL)