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?


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)

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.


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;

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);


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);

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.


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()

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.