Saya telah menghapus beberapa catatan dari tabel dalam database SQL Server. Sekarang ID berubah dari 101 menjadi 1.200. Saya ingin menghapus catatan lagi, tapi saya ingin ID kembali ke 102. Apakah ada cara untuk melakukan ini di SQL Server?
sql-server
auto-increment
delete-row
jumbojs
sumber
sumber
Jawaban:
Keluarkan perintah berikut untuk me-reseed mytable untuk memulai pada 1:
Baca tentang itu di Books on Line (BOL, bantuan SQL). Juga berhati-hatilah karena Anda tidak memiliki catatan yang lebih tinggi dari benih yang Anda atur.
sumber
DBCC CHECKIDENT (mytable, RESEED, 0)
jika angka = 0 maka pada sisipan berikutnya bidang kenaikan otomatis akan berisi nilai 1
jika angka = 101 maka pada sisipan berikutnya bidang kenaikan otomatis akan berisi nilai 102
Beberapa info tambahan ... Semoga bermanfaat bagi Anda
Sebelum memberikan kenaikan otomatis
number
dalam kueri di atas, Anda harus memastikan kolom kenaikan otomatis tabel yang ada berisi nilai lebih sedikit dari itunumber
.Untuk mendapatkan nilai maksimum kolom (nama_kolom) dari tabel (table1), Anda bisa menggunakan kueri berikut
sumber
semi-idiot-bukti:
http://sqlserverplanet.com/tsql/using-dbcc-checkident-to-reseed-a-table-after-delete
sumber
Jika Anda menggunakan MySQL, coba ini:
sumber
Hapus dan Kembalikan semua tabel dalam database.
sumber
Saya menemukan jawabannya. Nya:
sumber
Berdasarkan jawaban yang diterima, bagi mereka yang mengalami masalah serupa, dengan kualifikasi skema penuh:
(
[MyDataBase].[MySchemaName].[MyTable]
) ... menghasilkan kesalahan, Anda harus berada dalam konteks DB ituArtinya, berikut ini akan menimbulkan kesalahan:
Lampirkan nama tabel yang sepenuhnya memenuhi syarat dengan satu kutipan saja:
sumber
Beberapa jawaban merekomendasikan penggunaan pernyataan seperti ini:
Tetapi OP mengatakan "menghapus beberapa catatan", yang mungkin tidak semuanya, jadi nilai 0 tidak selalu yang benar. Jawaban lain menyarankan secara otomatis menemukan nilai maksimum saat ini dan me-reseeding ke yang itu, tetapi itu akan bermasalah jika tidak ada catatan dalam tabel, dan dengan demikian max () akan mengembalikan NULL. Sebuah komentar disarankan hanya menggunakan
untuk mengatur ulang nilai, tetapi komentar lain dengan benar menyatakan bahwa ini hanya meningkatkan nilai ke maksimum yang sudah ada dalam tabel; ini tidak akan mengurangi nilai jika sudah lebih tinggi dari maksimum dalam tabel, yang mana OP ingin lakukan.
Solusi yang lebih baik menggabungkan ide-ide ini. CHECKIDENT pertama me-reset nilai ke 0, dan yang kedua me-reset ke nilai tertinggi saat ini dalam tabel, jika ada catatan dalam tabel:
Seperti yang ditunjukkan beberapa komentar, pastikan tidak ada kunci asing di tabel lain yang menunjuk ke catatan yang dihapus. Kalau tidak, kunci asing itu akan menunjuk ke catatan yang Anda buat setelah me-reseed tabel, yang hampir pasti bukan yang ada dalam pikiran Anda.
sumber
Saya ingin menambahkan jawaban ini karena
DBCC CHECKIDENT
-approach akan menghasilkan masalah ketika Anda menggunakan skema untuk tabel. Gunakan ini untuk memastikan:Jika Anda ingin memeriksa keberhasilan operasi, gunakan
yang seharusnya ditampilkan
0
dalam contoh di atas.sumber
Anda tidak ingin melakukan ini secara umum. Ditinjau ulang dapat menyebabkan masalah integritas data. Ini benar-benar hanya untuk digunakan pada sistem pengembangan di mana Anda memusnahkan semua data uji dan memulai dari awal. Itu tidak boleh digunakan pada sistem produksi jika semua catatan terkait belum dihapus (tidak setiap tabel yang harus dalam hubungan kunci asing adalah!). Anda dapat membuat kekacauan melakukan ini dan terutama jika Anda bermaksud melakukannya secara teratur setelah setiap penghapusan. Adalah ide yang buruk untuk khawatir tentang kesenjangan dalam nilai bidang identitas Anda.
sumber
Bagaimana dengan ini?
Ini adalah cara cepat dan sederhana untuk mengubah kenaikan otomatis ke 0 atau angka apa pun yang Anda inginkan. Saya menemukan ini dengan mengekspor database dan membaca kode sendiri.
Anda juga dapat menulisnya seperti ini untuk menjadikannya solusi satu baris:
sumber