Fungsi pengambilan nilai identifikasi di SQL SERVER 2000 Di SQL Server 2000, kolom identitas ditentukan oleh IDENTITY, dan berikut ini terkait dengan mendapatkan nilai identitas rekaman terakhir yang disisipkan
Contoh ilustrasi fungsi off
Di SQL Server, Anda dapat menggunakan SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() untuk mendapatkan nilai rekaman terakhir yang dimasukkan, dan perbedaan di antara keduanya adalah: SCOPE_IDENTITY() mengembalikan nilai IDENTITY terakhir yang disisipkan di dalam kolom IDENTITY dalam cakupan yang sama. Ruang lingkup adalah modul - prosedur tersimpan, pemicu, fungsi
Angka atau kelompok. Oleh karena itu, jika dua pernyataan berada dalam prosedur, fungsi, atau batch tersimpan yang sama, keduanya berada dalam cakupan yang sama. @@IDENTITY Mengembalikan nilai identifikasi terakhir yang dihasilkan di semua tabel di sesi saat ini IDENT_CURRENT() mengembalikan nilai identifikasi terakhir yang dihasilkan untuk tabel yang ditentukan dalam sesi apa pun dan cakupan apa pun Berikut adalah contoh untuk menggambarkan perbedaan mereka
-- a) Kode sampel -- =========================================== -- Buat tabel pengujian -- =========================================== GUNAKAN tempdb PERGI
BUAT TABEL t1(id int IDENTITY, col int) MASUKKAN t1 PILIH 1 SERIKAT SEMUA PILIH 2 BUAT TABEL t2(id int IDENTITY, col int) PERGI
BUAT TR_insert_t2 PEMICU PADA t2 UNTUK MEMASUKKAN SEBAGAI MASUKKAN t1 PILIH 3 PERGI
-- =========================================== - Uji tiga fungsi: 1 -- =========================================== MASUKKAN NILAI T2(1) PILIH [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Untuk t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Untuk t2]=IDENT_CURRENT(N't2')
/*--Hasil SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Untuk t1 IDENT_CURRENT() Untuk t2 ------------------ ------------ -------------------------- ----------------------- 1 3 3 1
(Jumlah baris yang terpengaruh adalah 1 baris) --*/ PERGI
-- =========================================== - Uji tiga fungsi: 2 -- =========================================== MASUKKAN NILAI T1(10) PILIH [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Untuk t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Untuk t2]=IDENT_CURRENT(N't2')
/*--Hasil SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Untuk t1 IDENT_CURRENT() Untuk t2 ------------------ ------------ -------------------------- ----------------------- 4 4 4 1
(Jumlah baris yang terpengaruh adalah 1 baris) --*/ PERGI
-- =========================================== - Uji tiga fungsi: 3 -- ** Buka koneksi baru dan jalankan kode berikut ** -- =========================================== PILIH [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Untuk t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Untuk t2]=IDENT_CURRENT(N't2')
/*--Hasil SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Untuk t1 IDENT_CURRENT() Untuk t2 ------------------ ------------ -------------------------- ----------------------- NULL NULL 4 &n
--=========================================== -- Hapus lingkungan pengujian -- =========================================== DROP TABLE t1,t2
-- b) Deskripsi hasil kode Seperti yang Anda lihat dari kode di atas: IDENT_CURRENT() selalu mengembalikan nilai terakhir yang diidentifikasi yang dimasukkan dalam tabel yang ditentukan @@IDENTITY Mengembalikan nilai identitas sesi saat ini, baik dalam cakupan yang sama atau tidak, dalam pengujian 1 dan 2, dapat dilihat bahwa ia mengembalikan nilai identitas dari rekaman yang dimasukkan dalam pemicu, dan di
Dalam Pengujian 3, NULL dikembalikan karena tidak ada catatan penyisipan dalam sesi saat ini SCOPE_IDENTITY() mengembalikan nilai identifikasi dari cakupan yang sama dari sesi saat ini, jadi dalam pengujian 1, 2, mengembalikan nilai yang tidak terpengaruh oleh pemicu, dan dalam pengujian 3, karena sesi saat ini tidak diinterpolasi
record, sehingga mengembalikan NULL
|