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

Saya ingin menambahkan kolom ke database lama yang ada dan menulis prosedur yang dengannya saya dapat menetapkan nilai berbeda pada setiap record. Sesuatu seperti menambahkan kolom dan membuat data secara otomatis.

Misalnya, jika saya menambahkan kolom baru yang disebut "ID" (angka), saya ingin menginisialisasi nilai unik untuk setiap catatan. Jadi, kolom ID saya akan memiliki catatan dari katakanlah 1 to 1000.
Bagaimana cara melakukannya?


person Adhip Gupta    schedule 20.09.2008    source sumber
comment
Ini akan menjadi spesifik basis data. Anda harus menentukan database apa yang sedang Anda gunakan.   -  person dvorak    schedule 20.09.2008
comment
Anda harus mengedit pertanyaan Anda untuk menyebutkan hal itu.   -  person dvorak    schedule 20.09.2008


Jawaban (8)


Ini akan bergantung pada database tetapi untuk SQL Server, ini dapat dicapai dengan cara berikut:

alter table Example
add NewColumn int identity(1,1)
person Simon Johnson    schedule 20.09.2008
comment
Itu bekerja dengan baik dan menambahkan semua nomor yang saya butuhkan secara otomatis. Terima kasih! - person djangofan; 25.10.2011
comment
Jika Anda memiliki masalah dalam membuat perubahan dengan gui studio manajemen, Anda dapat mengubah pengaturan di bawah /Tools/Options/Designer/Table dan Database Desiger Anda akan menemukan kotak centang Prevent saving changes that require table re-creation hapus centang pada kotak itu dan Anda akan dapat menambahkan kolom identitas bahkan dengan menggunakan gui. - person surfmuggle; 05.11.2012

Akan membantu jika Anda memposting database SQL apa yang Anda gunakan. Untuk MySQL Anda mungkin menginginkan kenaikan_otomatis:

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY

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

person Tom Martin    schedule 20.09.2008
comment
Saya mungkin juga mengonfirmasi bahwa ini memang berfungsi untuk MySQL; Saya baru saja menambahkan bidang id yang bertambah ke tabel yang tidak diindeks dan setiap baris mendapat id baru yang unik. - person Doug Kavendek; 12.07.2011
comment
Maaf ini sudah lama tapi di judulnya tertulis SQL server. - person Nick; 24.07.2012

untuk Oracle Anda bisa melakukan sesuatu seperti di bawah ini

alter table mytable add (myfield integer);

update mytable set myfield = rownum;
person Roy Tang    schedule 20.09.2008

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

ALTER TABLE tableName ADD id SERIAL;
ALTER TABLE tableName ADD PRIMARY KEY (id);
person Flavien Volken    schedule 07.09.2011

Hanya menggunakan ALTER TABLE sudah cukup. Tambahkan kolom dengan tipe yang tepat dan tanda IDENTITAS dan itu akan berhasil

Lihat artikel MSDN ini http://msdn.microsoft.com/en-us/library/aa275462(SQL.80).aspx pada sintaks ALTER TABLE

person Ilya Kochetov    schedule 20.09.2008

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);
person Snziv Gupta    schedule 27.12.2017

Tergantung pada databasenya, 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 membaca data dan memperbarui id dengan urutan. Setelah data ditetapkan, saya akan menambahkan urutan ke tabel yang dimulai setelah angka teratas. Setelah data disetel, atur kunci utama dengan benar.

person Joshua    schedule 20.09.2008

Jika Anda tidak ingin kolom baru Anda bertipe IDENTITY (kenaikan otomatis), atau Anda ingin lebih spesifik tentang urutan penomoran baris Anda, Anda dapat menambahkan kolom bertipe INT NULL lalu mengisinya seperti ini . Dalam contoh saya, kolom baru disebut MyNewColumn dan kolom kunci utama yang ada untuk tabel tersebut 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()

person Jinlye    schedule 21.04.2017