@@IDENTITY (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Adalah fungsi sistem yang mengembalikan nilai identitas terakhir yang disisipkan.

Konvensi sintaks transact-SQL

Sintaksis

@@IDENTITY  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Jenis Kembalian

numerik(38,0)

Keterangan

Setelah pernyataan INSERT, SELECT INTO, atau salinan massal selesai, @@IDENTITY berisi nilai identitas terakhir yang dihasilkan oleh pernyataan. Jika pernyataan tidak memengaruhi tabel apa pun dengan kolom identitas, @@IDENTITY mengembalikan NULL. Jika beberapa baris disisipkan, menghasilkan beberapa nilai identitas, @@IDENTITY mengembalikan nilai identitas terakhir yang dihasilkan. Jika pernyataan mengaktifkan satu atau beberapa pemicu yang melakukan penyisipan yang menghasilkan nilai identitas, memanggil @@IDENTITY segera setelah pernyataan mengembalikan nilai identitas terakhir yang dihasilkan oleh pemicu. Jika pemicu diaktifkan setelah tindakan sisipkan pada tabel yang memiliki kolom identitas, dan pemicu menyisipkan ke tabel lain yang tidak memiliki kolom identitas, @@IDENTITY mengembalikan nilai identitas dari sisipan pertama. Nilai @@IDENTITY tidak kembali ke pengaturan sebelumnya jika pernyataan INSERT atau SELECT INTO atau salinan massal gagal, atau jika transaksi digulung balik.

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.

@@IDENTITY, SCOPE_IDENTITY, dan IDENT_CURRENT adalah fungsi serupa karena semuanya mengembalikan nilai terakhir yang dimasukkan ke dalam kolom IDENTITY tabel.

@@IDENTITY dan SCOPE_IDENTITY mengembalikan nilai identitas terakhir yang dihasilkan dalam tabel apa pun dalam sesi saat ini. Namun, SCOPE_IDENTITY mengembalikan nilai hanya dalam cakupan saat ini; @@IDENTITY tidak terbatas pada cakupan tertentu.

IDENT_CURRENT tidak dibatasi oleh cakupan dan sesi; ini terbatas pada tabel tertentu. IDENT_CURRENT mengembalikan 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 @@IDENTITY adalah sesi saat ini di server lokal tempat fungsi 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 nilai @@IDENTITY, karena digunakan dalam pemicu replikasi dan prosedur tersimpan. @@IDENTITY bukan indikator yang dapat diandalkan dari identitas yang dibuat pengguna terbaru jika kolom adalah bagian dari artikel replikasi. Anda dapat menggunakan sintaks fungsi SCOPE_IDENTITY() 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  

Lihat Juga

Fungsi Sistem (Transact-SQL)
BUAT TABEL (Transact-SQL)
IDENT_CURRENT (T-SQL)
INSERT (Transact-SQL)
SCOPE_IDENTITY (T-SQL)
SELECT (Transact-SQL)