Tambahkan kolom ke tabel yang ada dan beri nomor unik pada MS SQL Server

121

Saya ingin menambahkan kolom ke database warisan yang ada dan menulis prosedur yang dapat saya gunakan untuk menetapkan nilai yang berbeda pada setiap record. Sesuatu seperti menambahkan kolom dan membuat datanya secara otomatis.

Seperti, jika saya menambahkan kolom baru bernama "ID" (angka), saya ingin menginisialisasi nilai unik ke setiap record. Jadi, kolom ID saya akan memiliki catatan dari say 1 to 1000.
Bagaimana aku melakukan itu?

Adhip Gupta
sumber
2
Ini akan menjadi spesifik database. Anda harus menentukan database apa yang Anda gunakan.
dvorak
1
Anda harus mengedit pertanyaan Anda untuk menyebutkannya.
dvorak

Jawaban:

221

Ini akan tergantung pada database tetapi untuk SQL Server, ini dapat dicapai sebagai berikut:

alter table Example
add NewColumn int identity(1,1)
Simon Johnson
sumber
5
Itu bekerja dengan baik dan menambahkan semua angka yang saya butuhkan secara otomatis. Terima kasih!
djangofan
9
Jika Anda mengalami masalah saat membuat perubahan dengan gui studio manajemen, Anda dapat mengubah pengaturan di bawah / Tools / Options / Designer / Table dan Database Desiger Anda akan menemukan kotak Prevent saving changes that require table re-creationcentang hapus centang pada kotak itu dan Anda akan dapat menambahkan kolom identitas bahkan dengan menggunakan gui.
surfmuggle pada
22

Ini akan membantu jika Anda memposting database SQL apa yang Anda gunakan. Untuk MySQL Anda mungkin menginginkan auto_increment:

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY

Tidak yakin apakah ini menerapkan nilai secara retroaktif. Jika tidak, Anda hanya dapat mengulang nilai-nilai Anda dengan prosedur tersimpan atau dalam program sederhana (selama tidak ada orang lain yang menulis ke database) dan mengatur penggunaan LAST_INSERT_ID()fungsi untuk menghasilkan nilai id.

Tom Martin
sumber
7
Saya mungkin juga mengonfirmasi bahwa ini memang berfungsi untuk MySQL; Saya baru saja menambahkan bidang id yang bertambah ke tabel yang tidak terindeks dan setiap baris mendapat id baru yang unik.
Doug Kavendek
Maaf ini yang lama tapi itu mengatakan SQL server di judulnya.
Nick
11

untuk oracle Anda bisa melakukan sesuatu seperti di bawah ini

alter table mytable add (myfield integer);

update mytable set myfield = rownum;
Roy Tang
sumber
8

Dan yang setara dengan Postgres (baris kedua wajib hanya jika Anda ingin "id" menjadi kunci):

ALTER TABLE tableName ADD id SERIAL;
ALTER TABLE tableName ADD PRIMARY KEY (id);
Flavien Volken
sumber
3

untuk tipe data UNIQUEIDENTIFIER di sql server coba ini

Alter table table_name
add ID UNIQUEIDENTIFIER not null unique default(newid())

Jika Anda ingin membuat kunci utama dari kolom itu gunakan ini

ALTER TABLE table_name
ADD CONSTRAINT PK_name PRIMARY KEY (ID);
Snziv Gupta
sumber
0

Bergantung pada database karena setiap database memiliki cara berbeda untuk menambahkan nomor urut. Saya akan mengubah tabel untuk menambahkan kolom kemudian menulis skrip db di groovy / python / etc untuk dibaca dalam data dan memperbarui id dengan urutan. Setelah data ditetapkan, saya akan menambahkan urutan ke tabel yang dimulai setelah nomor teratas. Setelah data disetel, setel kunci utama dengan benar.

Joshua
sumber
0

Jika Anda tidak ingin kolom baru Anda bertipe IDENTITY(auto-increment), atau Anda ingin lebih spesifik tentang urutan penomoran baris, Anda dapat menambahkan kolom tipe INT NULLdan mengisinya seperti ini. Dalam contoh saya, kolom baru disebut MyNewColumn dan kolom kunci utama yang ada untuk tabel disebut MyPrimaryKey.

UPDATE MyTable
SET MyTable.MyNewColumn = AutoTable.AutoNum
FROM
(
    SELECT MyPrimaryKey, 
    ROW_NUMBER() OVER (ORDER BY SomeColumn, SomeOtherColumn) AS AutoNum
    FROM MyTable 
) AutoTable
WHERE MyTable.MyPrimaryKey = AutoTable.MyPrimaryKey  

Ini berfungsi di SQL Sever 2005 dan yang lebih baru, yaitu versi yang mendukung ROW_NUMBER()

Jinlye
sumber