Mevcut tabloya bir sütun ekleyin ve bunları MS SQL Server'da benzersiz şekilde numaralandırın


121

Mevcut bir eski veritabanına bir sütun eklemek ve her kayda farklı bir değer atayabileceğim bir prosedür yazmak istiyorum. Bir sütun eklemek ve bunun için verileri otomatik olarak oluşturmak gibi bir şey .

Örneğin, "Kimlik" (sayı) adında yeni bir sütun eklersem, kayıtların her birine benzersiz bir değer vermek istiyorum. Yani, ID sütunumda sayıca kayıtlar olacak 1 to 1000.
Bunu nasıl yaparım?


2
Bu, veritabanına özel olacak. Hangi veritabanıyla çalıştığınızı belirtmelisiniz.
dvorak

1
Bunu belirtmek için sorunuzu düzenlemelisiniz.
dvorak

Yanıtlar:


221

Bu, veritabanına bağlı olacaktır, ancak SQL Server için bu, aşağıdaki şekilde gerçekleştirilebilir:

alter table Example
add NewColumn int identity(1,1)

5
Bu çok güzel çalıştı ve ihtiyacım olan tüm sayıları otomatik olarak ekledi. Teşekkürler!
djangofan

9
Yönetim stüdyosu gui ile değişiklik yapmakta sorun yaşıyorsanız, / Araçlar / Seçenekler / Tasarımcı / Tablo ve Veritabanı Desiger altındaki ayarları değiştirebilirsiniz, Prevent saving changes that require table re-creationbu kutunun işaretini kaldıran bir onay kutusu göreceksiniz ve bunu kullanarak bile bir kimlik sütunu ekleyebileceksiniz. gui.
saat

22

Hangi SQL veritabanını kullandığınızı göndermeniz yardımcı olur. MySQL için muhtemelen auto_increment istersiniz:

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY

Bunun değerleri geriye dönük olarak uygulayıp uygulamadığından emin değilim. Aksi takdirde, değerlerinizi yalnızca bir saklı yordamla veya basit bir programla (veritabanına başka kimse yazmadığı sürece) yineleyebilmeli LAST_INSERT_ID()ve kimlik değerini oluşturmak için işlevi kullanmalısınız .


7
Bunun MySQL için gerçekten çalıştığını doğrulayabilirim; Mevcut bir dizine eklenmemiş tabloya artan bir kimlik alanı ekledim ve her satır benzersiz yeni bir kimlik aldı.
Doug Kavendek

Üzgünüm eski bir tane ama başlıkta SQL sunucusu yazıyordu.
Nick

11

oracle için aşağıdaki gibi bir şey yapabilirsin

alter table mytable add (myfield integer);

update mytable set myfield = rownum;

8

Ve Postgres eşdeğeri (ikinci satır yalnızca "id" nin anahtar olmasını istiyorsanız zorunludur):

ALTER TABLE tableName ADD id SERIAL;
ALTER TABLE tableName ADD PRIMARY KEY (id);


3

Sql sunucusunda UNIQUEIDENTIFIER veri türü için bunu deneyin

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

Bu sütundan birincil anahtar oluşturmak istiyorsanız bunu kullanın

ALTER TABLE table_name
ADD CONSTRAINT PK_name PRIMARY KEY (ID);

0

Her veritabanının sıra numarası eklemenin farklı bir yolu olduğu için veritabanına bağlıdır. Sütunu eklemek için tabloyu değiştirir, ardından verileri okumak ve kimliği bir dizi ile güncellemek için groovy / python / etc içinde bir db betiği yazarım. Veriler ayarlandıktan sonra, tabloya üst sayıdan sonra başlayan bir sıra eklerim. Veriler ayarlandıktan sonra, birincil anahtarları doğru şekilde ayarlayın.


0

Yeni sütununuzun tipte olmasını IDENTITY(otomatik artış) istemiyorsanız veya satırlarınızın numaralandırıldığı sırayla ilgili spesifik olmak istiyorsanız, bir tür sütunu ekleyebilir INT NULLve ardından bu şekilde doldurabilirsiniz . Örneğimde, yeni sütun MyNewColumn ve tablonun mevcut birincil anahtar sütunu MyPrimaryKey olarak adlandırılır.

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  

Bu, SQL Sever 2005 ve sonraki sürümlerde çalışır, örn. ROW_NUMBER()

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.