Bagikan melalui


@@IDENTITY (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceDatabase SQL di Microsoft Fabric

@@IDENTITY adalah fungsi sistem yang mengembalikan nilai identitas yang terakhir dimasukkan.

Konvensi sintaks transact-SQL

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, @@IDENTITY mengembalikan NULL.
  • Jika beberapa baris dimasukkan, menghasilkan beberapa nilai identitas, @@IDENTITY mengembalikan nilai identitas terakhir yang dihasilkan.
  • Jika pernyataan memicu 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 disisipkan ke tabel lain yang tidak memiliki kolom identitas, @@IDENTITY mengembalikan nilai identitas sisipan pertama. @@IDENTITY Nilai tidak dikembalikan ke pengaturan sebelumnya jika INSERT pernyataan atau SELECT INTO salinan 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.

  • @@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 ruang lingkup 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 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