Kin telah menunjukkan kepada Anda bagaimana Anda dapat mereset nilai IDENTITAS, tetapi di luar lingkungan pengembangan ketika Anda benar-benar menghapus semua data, mengapa Anda perlu melakukan ini?
Saya harap Anda tidak berniat untuk mempertahankan urutan nilai IDENTITAS yang berdekatan saat Anda berada di produksi. Dan saya harap Anda tidak benar-benar menulis kode Anda ke hard-code nilai IDENTITAS. Jika ini adalah nilai ID yang berarti maka Anda harus berhenti menggunakan properti IDENTITY.
Ada beberapa hal yang akan mencegah hal ini terjadi:
- jika nilai IDENTITAS diberikan selama transaksi, dan transaksi tersebut dibatalkan, nilai tersebut tidak "dikembalikan" dan nilai selanjutnya adalah yang tidak pernah digunakan +1.
- jika suatu baris nanti dihapus, IDENTITY tidak pernah kembali untuk mengisi kekosongan.
- ada bug aktif di SQL Server 2012 yang
tidak akan diperbaiki sampai SQL Server 2014 tidak akan pernah diperbaiki (kecuali jika Anda menggunakan tanda bendera tidak berdokumen dan sangat mahal) di mana restart tampaknya akan membuang hingga 1000 nilai dari kolom IDENTITY Anda . Bug di Connect menunjukkan bahwa ini terbatas pada peristiwa failover yang melibatkan Grup yang Tersedia tetapi saya dapat meyakinkan Anda bahwa bug tersebut jauh lebih luas dari itu.
Singkatnya, jika Anda peduli tentang kesenjangan atau ingin memberikan nilai-nilai ini makna khusus, berhenti menggunakan IDENTITAS. Jatuhkan dan buat kembali tabel dan ketika Anda perlu menghapus nilai-nilai dan mengisi kembali, baik melakukan pembaruan, atau melakukan sisipan dengan nilai-nilai hard-kode untuk kolom itu.
Selain itu, kunci utama dan identitas bukanlah hal yang sama. Kolom identitas bukan kunci utama kecuali jika Anda secara eksplisit mendefinisikannya, dan Anda tentu dapat memiliki kunci primer yang bukan kolom identitas.