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

Windows Azure SQL Database - kolom peningkatan Identitas Otomatis melewatkan nilai

Anda mungkin kurang beruntung di sini jika perlu menghilangkan celah ini.

Saya mengalami masalah ini sendiri saat saya mengembangkan/menguji aplikasi baru. Saya mengetahui apa yang terjadi di sini di sql Azure berdasarkan apa yang saya baca tentang sql server 2012. Saya belum dapat menemukan dokumentasi tentang ini untuk sql Azure.

Dari apa yang saya baca ini adalah fitur yang muncul sebagai bug IMO. Di server Sql 2012 Microsoft menambahkan kemampuan untuk membuat urutan. Urutan mencatat nilai apa yang telah digunakan dalam blok 1000. Jadi katakanlah urutan Anda sedang berkembang ... 1, 2, 3, 4, 5 ... dan kemudian server sql Anda restart. Nah urutannya telah menyimpan fakta bahwa blok 1-1000 telah digunakan sehingga melompat Anda ke 1000 berikutnya.... jadi nilai Anda berikutnya adalah 1001, 1002, 1003, 1004.... Ini meningkatkan kinerja sisipan saat menggunakan urutan, tetapi dapat menghasilkan celah yang tidak biasa. Ada solusi untuk ini untuk urutan Anda. Saat menentukan urutan Anda, tambahkan parameter "NOCACHE" sehingga tidak menyimpan blok 1000 sekaligus. Lihat di sini untuk dokumentasi selengkapnya.

Di mana ini menjadi masalah adalah bahwa kolom Identitas tampaknya telah diubah untuk menggunakan paradigma yang sama ini. Jadi ketika server Anda, atau dalam hal ini instance sql Azure Anda dimulai ulang, Anda bisa mendapatkan celah besar (1000) di kolom identitas Anda karena itu menyimpan blok besar sebagai "bekas". Ada solusi untuk ini untuk sql server 2012. Anda dapat menentukan flag startup t272 untuk mengembalikan identitas Anda menggunakan paradigma sql server 2008 r2 lama. Masalahnya adalah saya tidak tahu (mungkin tidak mungkin) tentang cara menentukan ini di sql Azure. Tidak dapat menemukan dokumentasi. Lihat utas ini untuk detail lebih lanjut tentang sql server 2012.

Periksa dokumentasi identitas di sini di msdn. Khususnya bagian "Nilai berturut-turut setelah server restart atau kegagalan lainnya". Berikut adalah apa yang dikatakan:

Jadi, jika Anda perlu memiliki nilai berurutan, Anda dapat mencoba menentukan urutan dengan nocache alih-alih mengandalkan kolom identitas Anda. Belum mencobanya sendiri, tetapi sepertinya Anda akan kesulitan menjalankannya dengan kerangka kerja entitas.

Maaf jika ini tidak banyak membantu, tapi setidaknya itu sedikit info tentang apa yang Anda alami.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server mengurutkan string yang dipisahkan koma dalam satu kolom

  2. Panggilan database .NET lambat saat menggunakan COM Interop, cepat melalui penganalisis kueri

  3. Cara Menemukan Pengidentifikasi Unik yang Optimal dalam Tabel di SQL Server:sp_special_columns

  4. Cara Membuat Daftar Fitur Usang dalam Instance SQL Server menggunakan T-SQL

  5. Bagaimana Cara Menampilkan Nomor Halaman pada Badan Laporan SSRS 2008 R2?