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.
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
, , @@IDENTITY
dan 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)