Di SQL Server, Anda dapat menggunakan T-SQL @@IDENTITY
fungsi sistem untuk mengembalikan nilai identitas yang dimasukkan terakhir di sesi saat ini.
Perhatikan bahwa ini mengembalikan nilai identitas terakhir yang dihasilkan di apa saja tabel di sesi saat ini . Ini berbeda dengan IDENT_CURRENT()
fungsi, yang mengembalikan nilai identitas yang dimasukkan terakhir untuk tabel tertentu .
SCOPE_IDENTITY()
fungsinya sangat mirip dengan @@IDENTITY
dalam hal itu juga mengembalikan nilai identitas yang dimasukkan terakhir di sesi saat ini. Perbedaannya adalah SCOPE_IDENTITY()
terbatas pada cakupan saat ini.
Contoh 1
Berikut adalah contoh kode dasar @@IDENTITY
penggunaan.
PILIH @@IDENTITAS SEBAGAI [Nilai Identitas yang Disisipkan Terakhir];
Hasil:
+--------------------------------+| Nilai Identitas yang Disisipkan Terakhir ||--------------------------------|| NULL |+--------------------------------+
Alasan ini mengembalikan NULL
adalah karena saya membuka sesi baru ke SQL Server, dan saya belum memperbarui kolom identitas selama sesi saya saat ini.
Di bawah ini adalah beberapa kode yang melakukan beberapa pembaruan kolom identitas.
CREATE TABLE Cats(id int IDENTITY);CREATE TABLE Dogs(id int IDENTITY);MASUKKAN NILAI DEFAULT Kucing;MASUKKAN NILAI DEFAULT Kucing;SELECT @@IDENTITY AS [Nilai Identitas yang Dimasukkan Terakhir];
Hasil:
+--------------------------------+| Nilai Identitas yang Disisipkan Terakhir ||--------------------------------|| 2 |+--------------------------------+
Di sini, saya membuat beberapa tabel, menyisipkan beberapa data, lalu memilih nilai identitas saat ini.
Nilai identitas saat ini adalah 2 karena saya memasukkan dua baris ke dalam tabel itu.
Sekarang mari kita masukkan satu baris ke tabel lainnya:
MASUKKAN NILAI DEFAULT Anjing;PILIH @@IDENTITAS SEBAGAI [Nilai Identitas yang Disisipkan Terakhir];
Hasil:
+--------------------------------+| Nilai Identitas yang Disisipkan Terakhir ||--------------------------------|| 1 |+--------------------------------+
Nilai yang dikembalikan adalah 1, karena itulah nilai identitas yang dimasukkan terakhir untuk sesi ini.
Contoh 2 – Dibandingkan dengan IDENT_CURRENT()
Ini dibandingkan dengan IDENT_CURRENT()
.
SELECT @@IDENTITY AS [@@IDENTITY], IDENT_CURRENT('Cats') AS [IDENT_CURRENT('Cats')], IDENT_CURRENT('Dogs') AS [IDENT_CURRENT('Dogs')];
Hasil:
+-------------+--------------+----- --------------------+| @@IDENTITAS | IDENT_CURRENT('Kucing') | IDENT_CURRENT('Anjing') ||--------------+-------------------------+- ------------------------|| 1 | 2 | 1 |+--------------+-------------------------+------ -------------------+
Seperti yang disebutkan, IDENT_CURRENT()
mengembalikan hasilnya berdasarkan tabel yang ditentukan. Oleh karena itu, kita dapat menggunakannya untuk menemukan nilai identitas terakhir untuk setiap tabel.
Contoh 3 – Beralih ke Sesi Baru
Sekarang jika saya membuka koneksi baru dan pilih @@IDENTITY
sekali lagi, inilah yang terjadi:
GUNAKAN Tes;PILIH @@IDENTITAS SEBAGAI [@@IDENTITY], IDENT_CURRENT('Kucing') SEBAGAI [IDENT_CURRENT('Kucing')], IDENT_CURRENT('Anjing') SEBAGAI [IDENT_CURRENT('Anjing')];Hasil:
+-------------+--------------+----- --------------------+| @@IDENTITAS | IDENT_CURRENT('Kucing') | IDENT_CURRENT('Anjing') ||--------------+-------------------------+- ------------------------|| NULL | 2 | 1 |+--------------+--------------+------ -------------------+
@@IDENTITY
hasilnya NULL karena saya belum memasukkan apa pun ke dalam kolom identitas di sesi baru.
IDENT_CURRENT()
hasilnya bukan NULL, karena hasilnya berdasarkan tabel – bukan sesi.@@IDENTITY vs SCOPE_IDENTITY() vs IDENT_CURRENT()
Lihat IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY di SQL Server:Apa Perbedaannya? untuk contoh sederhana yang menjelaskan perbedaan antara ketiga fungsi ini.