Sumber: Internet Penulis: Tidak dikenal
- Membuat database dan tabel
membuat database MyDataBase
menggunakan MyDataBase
Buat tabel mytable
id int identitas(1,1),
Nama Varchar(20)
)
--Jalankan SQL ini untuk mengetahui nilai kolom inkremental sendiri yang sesuai dengan catatan yang baru saja dimasukkan
sisipkan ke dalam nilai mytable('Li Si')
Pilih @@identity
2. Perbandingan ketiga metode tersebut
Di SQL Server 2000, ada tiga fitur serupa: SCOPE_IDENTITY, IDENT_CURRENT, dan @@IDENTITY, yang semuanya mengembalikan nilai yang dimasukkan ke dalam kolom IDENTITY.
IDENT_CURRENT Mengembalikan nilai identifikasi terakhir yang dihasilkan untuk tabel tertentu dalam sesi apa pun dan cakupan apa pun. IDENT_CURRENT Tidak dibatasi oleh cakupan dan sesi, tetapi oleh tabel yang ditentukan. IDENT_CURRENT Mengembalikan nilai yang dihasilkan untuk tabel tertentu dalam sesi dan cakupan apa pun.
@@IDENTITY Mengembalikan nilai identifikasi terakhir yang dihasilkan untuk tabel apa pun di semua cakupan sesi saat ini.
SCOPE_IDENTITY Mengembalikan nilai terakhir yang diidentifikasi yang dihasilkan untuk sesi saat ini dan tabel apa pun dalam cakupan saat ini
SCOPE_IDENTITY dan @@IDENTITY mengembalikan nilai identifikasi terakhir yang dihasilkan dalam tabel apa pun dalam sesi saat ini. Namun, SCOPE_IDENTITY hanya mengembalikan nilai yang dimasukkan ke dalam cakupan saat ini; @@IDENTITY Tidak terbatas pada ruang lingkup tertentu.
Misalnya, ada dua tabel, T1 dan T2, di mana pemicu INSERT ditentukan. Ketika baris dimasukkan ke dalam T1, pemicu dipicu dan baris dimasukkan ke dalam T2. Contoh ini mengilustrasikan dua cakupan: satu pada T1 dan satu pada T2 sebagai hasil dari pemicu.
Dengan asumsi T1 dan T2 memiliki kolom IDENTITY, @@IDENTITY dan SCOPE_IDENTITY akan mengembalikan nilai yang berbeda di akhir pernyataan INSERT pada T1.
@@IDENTITY Mengembalikan nilai kolom IDENTITY terakhir yang dimasukkan ke dalam cakupan apa pun dalam sesi saat ini, yang merupakan nilai yang disisipkan dalam T2.
SCOPE_IDENTITY() mengembalikan nilai IDENTITY yang disisipkan dalam T1, yang merupakan INSERT terakhir yang terjadi dalam cakupan yang sama. Jika fungsi SCOPE_IDENTITY() dipanggil sebelum pernyataan penyisipan ke kolom identitas terjadi dalam cakupan, fungsi mengembalikan nilai NULL.
Nilai yang dikembalikan oleh IDENT_CURRENT('T1') dan IDENT_CURRENT('T2') masing-masing adalah nilai inkremental mandiri terakhir dari dua tabel.
Eksperimen ajqc: (40 utas lokal, 40+40 utas jarak jauh uji bersamaan secara bersamaan, menyisipkan baris 1200W), kesimpulannya adalah:
1. Dalam aplikasi cascading yang khas. @@IDENTITY tidak dapat digunakan, dan konflik bersamaan akan terjadi ketika 1W berbaris ganda pada mesin SD CII850, 256M. Pada P42.8C dan 512M DDR, ada konflik bersamaan ketika hanya ada lebih dari 6000 jalur.
2.SCOPE_IDENTITY() benar-benar dapat diandalkan dan dapat digunakan dalam proses penyimpanan, bahkan pemicu tidak perlu dibangun, dan tidak ada konflik bersamaan
SELECT IDENT_CURRENT('TableName') - Mengembalikan nilai label terakhir yang dihasilkan dalam tabel yang ditentukan
SELECT IDENT_INCR('TableName') - mengembalikan nilai kenaikan bidang yang ditandai untuk tabel yang ditentukan
SELECT IDENT_SEED('TableName') - mengembalikan nilai seed bidang yang ditandai dari tabel yang ditentukan
Mengembalikan nomor otomatis rekaman terakhir yang dimasukkan
PILIH IDENT_CURRENT('Nama Tabel')
Kembali ke nomor otomatis berikutnya:
PILIH IDENT_CURRENT('TableName')+(PILIH IDENT_INCR('TableName'))
SELECT @@IDENTITY - Mengembalikan nilai yang ditandai terakhir yang dihasilkan di semua tabel di sesi saat ini
|