Saya memiliki database MS SQL 2005 dengan tabel Test
dengan kolom ID
. ID
adalah kolom identitas.
Saya memiliki baris dalam tabel ini dan semuanya memiliki nilai ID otomatis yang sesuai.
Sekarang saya ingin mengubah setiap ID dalam tabel ini seperti ini:
ID = ID + 1
Tetapi ketika saya melakukan ini saya mendapatkan kesalahan:
Tidak dapat memperbarui 'ID' kolom identitas.
Saya sudah mencoba ini:
ALTER TABLE Test NOCHECK CONSTRAINT ALL
set identity_insert ID ON
Tapi ini tidak menyelesaikan masalah.
Saya perlu menetapkan identitas pada kolom ini, tetapi saya perlu mengubah nilai juga dari waktu ke waktu. Jadi pertanyaan saya adalah bagaimana menyelesaikan tugas ini.
sumber
#temp
tabel yang Anda letakkan itu adalah langkah lain yang belum Anda hitung di sini.IDENTITY
nilai kolom tidak dapat diubah.Namun dimungkinkan untuk mengganti metadata tabel untuk menghapus
IDENTITY
properti, melakukan pembaruan, lalu beralih kembali.Dengan asumsi struktur berikut
Maka Anda bisa melakukannya
Dalam SQL Server 2012 dimungkinkan untuk memiliki kolom penambahan otomatis yang juga dapat diperbarui dengan lebih mudah
SEQUENCES
sumber
Melalui UI di SQL Server 2005 manager, ubah kolom hapus properti autonumber (identitas) dari kolom (pilih tabel dengan mengklik kanan padanya dan pilih "Desain").
Kemudian jalankan kueri Anda:
Lalu pergi dan tambahkan properti autonumber kembali ke kolom.
sumber
Id
nilai Identitas Otomatis dimatikan oleh 1.Pertama-tama pengaturan IDENTITY_INSERT aktif atau nonaktif dalam hal ini tidak akan berfungsi untuk apa yang Anda butuhkan (digunakan untuk memasukkan nilai baru, seperti memasukkan celah).
Melakukan operasi melalui GUI hanya membuat tabel sementara, menyalin semua data ke tabel baru tanpa bidang identitas, dan mengganti nama tabel.
sumber
Ini bisa dilakukan dengan menggunakan tabel sementara.
Ide
Pertanyaan SQL
Katakanlah
test
tabel Anda memiliki dua kolom tambahan (column2
dancolumn3
) dan ada 2 tabel yang memiliki referensi kunci asingtest
dipanggilforeign_table1
danforeign_table2
(karena masalah kehidupan nyata tidak pernah sederhana).Itu dia.
sumber
DBCC CHECKIDENT ('databasename.dbo.orders', RESEED, 999) Anda dapat mengubah nomor kolom identitas apa pun dengan perintah ini, dan Anda juga dapat memulai nomor bidang itu dari setiap nomor yang Anda inginkan. Misalnya dalam perintah saya saya minta mulai dari 1000 (999 +1) berharap itu akan cukup ... semoga berhasil
sumber
Jika kolom bukan PK Anda selalu bisa membuat kolom BARU di tabel dengan angka yang bertambah, jatuhkan yang asli dan kemudian ubah yang baru menjadi yang lama.
ingin tahu mengapa Anda mungkin perlu melakukan ini ... paling saya pernah harus futz dengan kolom Identity adalah untuk mengisi ulang angka dan saya akhirnya menggunakan DBCC CHECKIDENT (nama tab, nama, RESEED, newnextnumber)
semoga berhasil!
sumber
Memodifikasi identitas mungkin gagal tergantung pada sejumlah faktor, terutama berputar di sekitar objek / hubungan yang terhubung ke kolom id. Sepertinya desain db adalah sebagai masalah di sini karena id harus jarang jika pernah berubah (saya yakin Anda punya alasan dan cascasding perubahan). Jika Anda benar-benar perlu mengubah id dari waktu ke waktu, saya sarankan untuk membuat kolom id dummy baru yang bukan kunci utama / nomor otomatis yang dapat Anda kelola sendiri dan hasilkan dari nilai saat ini. Bergantian, ide Chrisotphers di atas akan menjadi saran saya yang lain jika Anda mengalami masalah dengan mengizinkan penyisipan identitas.
Semoga berhasil
PS itu tidak gagal karena urutan berurutan yang sedang berjalan berusaha memperbarui nilai dalam daftar ke item yang sudah ada dalam daftar id? mencengkeram sedotan, mungkin menambahkan jumlah baris + 1, maka jika itu berhasil kurangi jumlah baris: -S
sumber
Jika Anda perlu mengubah ID sesekali, mungkin sebaiknya tidak menggunakan kolom identitas. Di masa lalu kami telah mengimplementasikan bidang nomor otomatis secara manual menggunakan tabel 'Penghitung' yang melacak ID berikutnya untuk setiap tabel. IIRC kami melakukan ini karena kolom identitas menyebabkan kerusakan basis data di SQL2000 tetapi bisa mengubah ID kadang-kadang berguna untuk pengujian.
sumber
Anda bisa menyisipkan baris baru dengan nilai yang dimodifikasi dan kemudian menghapus baris lama. Contoh berikut mengubah ID agar sama dengan PersonId kunci asing
sumber
Pertama-tama simpan semua ID dan ubah secara terprogram ke nilai yang tidak Anda inginkan, kemudian hapus dari basis data dan kemudian masukkan lagi menggunakan sesuatu yang serupa:
Untuk penggunaan insert massal:
Sampel data dari file.csv:
Jika Anda tidak
identity_insert
mematikan, Anda akan mendapatkan kesalahan berikut:sumber
Saya melihat artikel bagus yang membantu saya keluar pada saat terakhir .. Saya mencoba untuk memasukkan beberapa baris dalam tabel yang memiliki kolom identitas tetapi melakukannya dengan salah dan harus menghapus kembali. Setelah saya menghapus baris maka kolom identitas saya berubah. Saya mencoba menemukan cara untuk memperbarui kolom yang dimasukkan tetapi - tidak berhasil. Jadi, saat mencari di google ditemukan tautan ..
http://beyondrelational.com/modules/2/blogs/28/posts/10337/sql-server-how-do-i-insert-an-explicit-value-into-an-identity-column-how-do- i-perbarui-nilai-an.aspx
sumber
Pertanyaan yang sangat bagus, pertama-tama kita perlu di IDENTITY_INSERT untuk tabel tertentu, setelah itu jalankan permintaan memasukkan (Harus menentukan nama kolom).
Catatan: Setelah mengedit kolom identitas, jangan lupa mematikan IDENTITY_INSERT. Jika belum selesai, Anda tidak dapat mengedit kolom identitas untuk tabel lainnya.
http://allinworld99.blogspot.com/2016/07/how-to-edit-identity-field-in-sql.html
sumber