IDENT_CURRENT (SQL Bertransaksi)

Berlaku untuk:yes SQL Server (semua versi yang didukung) YesAzure SQL Database YesAzure 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.

Topic link iconKonvensi Sintaksis T-SQL

Sintaks

IDENT_CURRENT( 'table_or_view' )  

Catatan

Untuk melihat sintaks transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

table_or_view
Adalah nama tabel atau tampilan yang nilai identitasnya dikembalikan. table_or_viewadalah varchar, tanpa default.

Jenis Pengembalian

numerik(@@MAXPRECISION,0))

Pengecualian

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

Dalam SQL Server, pengguna hanya dapat melihat metadata yang diamankan yang dimiliki pengguna atau di mana 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 terakhir dihasilkan. 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 awal.

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 diterapkan. 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 beberapa tabel yang digabungkan 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

A. Mengembalikan nilai identitas terakhir yang dihasilkan untuk tabel tertentu

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

USE AdventureWorks2012;  
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 nilai identitas berbeda yang dikembalikan oleh IDENT_CURRENT, , @@IDENTITYdan SCOPE_IDENTITY.

USE AdventureWorks2012;  
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 (SQL Bertransaksi)
SCOPE_IDENTITY (SQL Bertransaksi)
IDENT_INCR (SQL Bertransaksi)
IDENT_SEED (SQL Bertransaksi)
Ekspresi (transact-SQL)
Fungsi Sistem (SQL T-SQL)