Anda membuat kesalahan umum dengan mengasumsikan pesanan dalam tabel. Tabel tidak memiliki urutan. Hanya hasil yang memiliki urutan, yang tidak ditentukan kecuali ORDER BY eksplisit ditentukan.
Anda mungkin mengajukan pertanyaan yang berbeda:bagaimana nilai yang dihasilkan identitas ditetapkan dalam kasus penyisipan bersamaan? Jawabannya sederhana:tidak masalah . Dan jika Anda membuat asumsi tentang pesanan maka kode Anda rusak. Hal yang sama berlaku untuk kesenjangan. Aplikasi Anda akan berfungsi meskipun identitas yang dihasilkan benar-benar acak, dan aplikasi yang ditulis dengan benar akan bekerja jika identitasnya benar-benar acak. Gunakan SCOPE_IDENTITY()
untuk mengambil identitas yang terakhir dimasukkan. Lebih baik lagi, gunakan OUTPUT
klausa INSERT
, ini juga berfungsi untuk penyisipan multi-baris.
Sebagai catatan:identitas dihasilkan dalam urutan operasi memperoleh akses ke aliran log .