Sebagai judul, saya memiliki tabel yang sudah ada yang sudah diisi dengan 150000 catatan. Saya telah menambahkan kolom Id (yang saat ini nol).
Saya berasumsi saya dapat menjalankan kueri untuk mengisi kolom ini dengan angka tambahan, dan kemudian menetapkan sebagai kunci utama dan mengaktifkan kenaikan otomatis. Apakah ini cara yang benar untuk melanjutkan? Dan jika demikian, bagaimana cara saya mengisi angka awal?
sql-server
sql-server-2008
primary-key
alter-table
rencana ketakutan
sumber
sumber
ALTER TABLE ORDER ALTER COLUMN ORDERNO RESTART WITH 1
tetapi saya tidak ingin mencobanya tanpa memeriksa dengan seorang ahli :) Ref. pic.dhe.ibm.com/infocenter/iseries/v7r1m0/…alter table attachments add ATTACHMENT_NUMBER int identity (1000, 1)
PRIMARY KEY
implikasi yangNOT NULL
ada - jadi sekali lagi - itu tidak mutlak diperlukan. Tapi saya lebih suka eksplisit dan jadi saya selalu ada diNOT NULL
sana, hanya untuk menjadi jelasPRIMARY KEY
, indeks berkerumun dibuat secara otomatis untuk Anda (kecuali jika Anda secara eksplisit menentukanNONCLUSTERED
)Anda tidak dapat "menghidupkan" IDENTITAS: itu adalah tabel yang dibangun kembali.
Jika Anda tidak peduli dengan urutan nomor, Anda akan menambahkan kolom, BUKAN NULL, dengan IDENTITAS sekaligus. 150k baris tidak banyak.
Jika Anda perlu mempertahankan urutan nomor, maka tambahkan nomor yang sesuai. Kemudian gunakan desainer tabel SSMS untuk mengatur properti IDENTITY. Ini memungkinkan Anda untuk membuat skrip yang akan melakukan drop kolom / tambahkan / simpan nomor / reseed untuk Anda.
sumber
ALTER TABLE ... SWITCH
dapat melakukannya tanpa itu.Saya memiliki masalah ini, tetapi tidak dapat menggunakan kolom identitas (karena berbagai alasan). Saya memutuskan ini:
Dipinjam dari sini .
sumber
Jika kolom sudah ada di tabel Anda dan itu adalah nol, Anda dapat memperbarui kolom dengan perintah ini (ganti id, tablename, dan tablekey):
sumber
Ketika kami menambahkan dan kolom identitas di tabel yang ada, maka secara otomatis akan mengisi tidak perlu mengisi secara manual.
sumber
oleh perancang Anda dapat menetapkan identitas (1,1) klik kanan pada tbl => desing => di bagian kiri (klik kanan) => properties => di kolom identitas pilih #column
Properti
kolom idendtity
sumber
Jika tabel Anda memiliki hubungan dengan tabel lain menggunakan kunci primer atau foriegen, mungkin tidak mungkin untuk mengubah tabel Anda. jadi Anda perlu menjatuhkan dan membuat tabel lagi.
Untuk mengatasi masalah ini, Anda perlu Menghasilkan Script dengan mengklik kanan pada database dan dalam opsi lanjutan mengatur tipe data ke script untuk skema dan data. setelah itu, gunakan skrip ini dengan mengubah kolom Anda untuk mengidentifikasi dan membuat ulang tabel menggunakan menjalankan kueri.
kueri Anda akan seperti di sini:
sumber
Inilah ide yang bisa Anda coba. Tabel asli - tidak ada kolom identitas table1 membuat tabel baru - panggilan table2 bersama dengan kolom identitas. salin data dari table1 ke table2 - kolom identitas diisi secara otomatis dengan angka yang bertambah secara otomatis.
ganti nama tabel asli - table1 ke table3 ganti nama tabel baru - table2 ke table1 (tabel asli) Sekarang Anda memiliki table1 dengan kolom identitas dimasukkan dan diisi untuk data yang ada. setelah memastikan tidak ada masalah dan berfungsi dengan baik, letakkan table3 saat tidak lagi diperlukan.
sumber
Buat Tabel baru Dengan nama berbeda dan kolom yang sama, Kunci Primer dan asosiasi Kunci Asing dan tautkan ini dalam pernyataan kode Insert Anda. Untuk Misalnya: Untuk KARYAWAN, ganti dengan KARYAWAN.
Namun, Anda harus menghapus Tabel EMPLOYEE yang ada atau melakukan beberapa penyesuaian sesuai dengan kebutuhan Anda.
sumber
Jawaban ini adalah tambahan kecil untuk jawaban terpilih tertinggi dan berfungsi untuk SQL Server. Pertanyaannya meminta kunci primer kenaikan otomatis, jawaban saat ini memang menambahkan kunci utama, tetapi tidak ditandai sebagai kenaikan otomatis. Script di bawah ini memeriksa kolom, keberadaan, dan menambahkannya dengan flag peningkatan otomatis diaktifkan.
sumber
sumber
ubah tabel / ** rekatkan nama tabal ** / tambahkan ID int IDENTITY (1,1)
hapus dari / ** rekatkan nama tabal ** / di mana id
(
pilih a.id DARI / ** tempelkan nama tabal / sebagai LEFT OUTER JOIN (SELECT MIN (id) sebagai id DARI / tempelkan nama tabal / GROUP BY / tempel kolom c1, c2 .... ** /
DI MANA t1.id NULL
)
ubah tabel / ** rekatkan nama tabal ** / DROP COLUMN id
sumber
Coba sesuatu seperti ini (pada tabel tes terlebih dahulu):
Saya belum menguji ini sama sekali, jadi berhati-hatilah!
sumber
IDENTITY
kolom) dan tidak akan berhasil.UPDATE your_table SET your_id_field = MAX(your_id_field)+1
Anda tidak bisa hanya menyerah diMAX
sana. Di manaWHERE
klausa untuk menghindari berulang kali memperbarui baris yang sama?Ini berfungsi di MariaDB, jadi saya hanya bisa berharap itu terjadi di SQL Server: jatuhkan kolom ID yang baru saja Anda masukkan, kemudian gunakan sintaks berikut: -
ALTER TABLE table_name ADD id INT PRIMARY KEY AUTO_INCREMENT;
Tidak perlu meja lain. Ini hanya menyisipkan kolom id, menjadikannya indeks utama, dan mengisinya dengan nilai sekuensial. Jika SQL Server tidak akan melakukan ini, permintaan maaf saya karena membuang waktu Anda.
sumber
ALTER TABLE table_name TAMBAH ID KOLOM KE BUKAN NULL PRIMARY KEY AUTO_INCREMENT; Ini bisa bermanfaat
sumber