Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Database SQL di Microsoft Fabric
@@IDENTITY adalah fungsi sistem yang mengembalikan nilai identitas yang terakhir dimasukkan.
Sintaks
@@IDENTITY
Tipe pengembalian
numerik(38,0)
Keterangan
Setelah INSERTpernyataan , SELECT INTO, atau salinan massal selesai, @@IDENTITY berisi nilai identitas terakhir yang dihasilkan oleh pernyataan.
- Jika pernyataan tidak memengaruhi tabel dengan kolom identitas,
@@IDENTITYmengembalikanNULL. - Jika beberapa baris dimasukkan, menghasilkan beberapa nilai identitas,
@@IDENTITYmengembalikan nilai identitas terakhir yang dihasilkan. - Jika pernyataan memicu satu atau beberapa pemicu yang melakukan penyisipan yang menghasilkan nilai identitas, memanggil
@@IDENTITYsegera setelah pernyataan mengembalikan nilai identitas terakhir yang dihasilkan oleh pemicu. - Jika pemicu diaktifkan setelah tindakan sisipkan pada tabel yang memiliki kolom identitas, dan pemicu disisipkan ke tabel lain yang tidak memiliki kolom identitas,
@@IDENTITYmengembalikan nilai identitas sisipan pertama.@@IDENTITYNilai tidak dikembalikan ke pengaturan sebelumnya jikaINSERTpernyataan atauSELECT INTOsalinan massal gagal, atau jika transaksi diputar kembali.
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 IGNORE_DUP_KEY pelanggaran, nilai identitas saat ini untuk tabel masih bertambah.
@@IDENTITY, SCOPE_IDENTITY, dan IDENT_CURRENT merupakan fungsi serupa karena semuanya mengembalikan nilai terakhir yang dimasukkan ke dalam IDENTITY kolom tabel.
@@IDENTITYdanSCOPE_IDENTITYmengembalikan nilai identitas terakhir yang dihasilkan dalam tabel apa pun dalam sesi saat ini. Namun,SCOPE_IDENTITYmengembalikan nilai hanya dalam cakupan saat ini;@@IDENTITYtidak terbatas pada cakupan tertentu.IDENT_CURRENTtidak dibatasi oleh ruang lingkup dan sesi; Ini terbatas pada tabel tertentu.IDENT_CURRENTmengembalikan nilai identitas yang dihasilkan untuk tabel tertentu dalam sesi apa pun dan cakupan apa pun. Untuk informasi selengkapnya, lihat IDENT_CURRENT (Transact-SQL).
Cakupan fungsi adalah @@IDENTITY sesi saat ini di server lokal tempat fungsi tersebut dijalankan. Fungsi ini tidak dapat diterapkan ke server jarak jauh atau tertaut. Untuk mendapatkan nilai identitas di server yang berbeda, jalankan prosedur tersimpan pada server jarak jauh atau tertaut tersebut dan minta prosedur tersimpan tersebut (yang dijalankan dalam konteks server jarak jauh atau tertaut) kumpulkan nilai identitas dan kembalikan ke koneksi panggilan di server lokal.
Replikasi dapat memengaruhi @@IDENTITY nilai, karena digunakan dalam pemicu replikasi dan prosedur tersimpan.
@@IDENTITY bukan indikator yang dapat diandalkan dari identitas buatan pengguna terbaru jika kolom tersebut adalah bagian dari artikel replikasi. Anda dapat menggunakan SCOPE_IDENTITY() sintaks fungsi alih-alih @@IDENTITY. Untuk informasi selengkapnya, lihat SCOPE_IDENTITY (Transact-SQL)
Catatan
Prosedur tersimpan panggilan atau pernyataan Transact-SQL harus ditulis ulang untuk menggunakan SCOPE_IDENTITY() fungsi , yang mengembalikan identitas terbaru yang digunakan dalam cakupan pernyataan pengguna tersebut, dan bukan identitas dalam cakupan pemicu berlapis yang digunakan oleh replikasi.
Contoh
Contoh berikut menyisipkan baris ke dalam tabel dengan kolom identitas (LocationID) dan menggunakan @@IDENTITY untuk menampilkan nilai identitas yang digunakan di baris baru.
USE AdventureWorks2022;
GO
--Display the value of LocationID in the last row in the table.
SELECT MAX(LocationID) FROM Production.Location;
GO
INSERT INTO Production.Location (Name, CostRate, Availability, ModifiedDate)
VALUES ('Damaged Goods', 5, 2.5, GETDATE());
GO
SELECT @@IDENTITY AS 'Identity';
GO
--Display the value of LocationID of the newly inserted row.
SELECT MAX(LocationID) FROM Production.Location;
GO