Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengapa ada celah dalam nilai kolom IDENTITY saya?

Properti identitas pada kolom tidak menjamin hal berikut :

Keunikan nilai – Keunikan harus ditegakkan dengan menggunakan KUNCI UTAMA atau batasan UNIK atau indeks UNIK.

Nilai berurutan dalam suatu transaksi – Transaksi yang menyisipkan beberapa baris tidak dijamin mendapatkan nilai berurutan untuk baris karena penyisipan bersamaan lainnya mungkin terjadi pada tabel. Jika nilai harus berurutan maka transaksi harus menggunakan kunci eksklusif di atas meja atau menggunakan tingkat isolasi SERIALIZABLE.

Nilai berturut-turut setelah server dimulai ulang atau kegagalan lainnya –SQL Server mungkin menyimpan nilai identitas untuk alasan kinerja dan beberapa nilai yang ditetapkan dapat hilang selama kegagalan database atau server restart. Hal ini dapat mengakibatkan kesenjangan dalam nilai identitas saat dimasukkan. Jika celah tidak dapat diterima maka aplikasi harus menggunakan generator urutan dengan opsi NOCACHE atau menggunakan mekanismenya sendiri untuk menghasilkan nilai kunci.

Penggunaan kembali nilai – Untuk properti identitas tertentu dengan seed/increment tertentu, nilai identitas tidak digunakan kembali oleh mesin. Jika pernyataan penyisipan tertentu gagal atau jika pernyataan penyisipan dibatalkan, maka nilai identitas yang dikonsumsi akan hilang dan tidak akan dibuat lagi. Hal ini dapat mengakibatkan kesenjangan ketika nilai identitas berikutnya dihasilkan.

Juga,

Jika ada kolom identitas untuk tabel dengan penghapusan yang sering, kesenjangan dapat terjadi antara nilai identitas. Jika ini menjadi perhatian, jangan gunakan properti IDENTITY. Namun, untuk memastikan tidak ada celah yang dibuat atau untuk mengisi celah yang ada , evaluasi nilai identitas yang ada sebelum memasukkannya secara eksplisit dengan SET IDENTITY_INSERT ON .

Juga, Periksa Properti Kolom Identitas &periksa nilai Peningkatan Identitas. Seharusnya 1.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pernyataan pembaruan dinamis dengan nama kolom variabel

  2. Aktifkan Database Mail di SQL Server (T-SQL)

  3. Cara Mengirim Email HTML dari SQL Server (T-SQL)

  4. Bagaimana cara saya menulis .Skip(1000).Take(100) LINQ dalam SQL murni?

  5. Cara Mengirim Email Hasil Query di SQL Server (T-SQL)