既存のテーブルに列を追加し、MS SQL Serverで一意に番号を付けます


121

既存のレガシーデータベースにを追加し、各レコードに異なる値を割り当てることができる手順を記述したいと思います。を追加し、そのデータを自動生成するようなもの。

同様に、"ID"(数値)という新しいを追加する場合は、各レコードに一意の値を初期化します。したがって、私のID にはsayのレコードが含まれます1 to 1000
それ、どうやったら出来るの?


2
これはデータベース固有になります。使用しているデータベースを指定する必要があります。
dvorak 2008

1
あなたはそれを言及するために質問を編集するべきです。
dvorak 2008

回答:


221

これはデータベースによって異なりますが、SQL Serverの場合、次のようにして実現できます。

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

5
それは美しく機能し、私が必要とするすべての数を自動的に追加しました。ありがとう!
djangofan 2011年

9
Management StudioのGUIで変更を加える際に問題が発生した場合は、/ Tools / Options / Designer / Table and Database Desigerで設定を変更できます。Prevent saving changes that require table re-creationチェックボックスがオフになっているので、チェックボックスをオフにします。ID 列を追加するには、 gui。
surfmuggle

22

使用しているSQLデータベースを投稿すると役立ちます。MySQLの場合、おそらくauto_incrementが必要です。

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY

ただし、これが値をさかのぼって適用するかどうかはわかりません。そうでない場合は、ストアドプロシージャまたは単純なプログラムで(他のユーザーがデータベースに書き込んでいない限り)値を反復処理し、LAST_INSERT_ID()関数を使用してid値を生成できます。


7
これが実際にMySQLで機能することも確認できます。増分するidフィールドを既存のインデックス付けされていないテーブルに追加したところ、各行に一意の新しいIDが割り当てられました。
Doug Kavendek

申し訳ありませんが古いものですが、タイトルにSQLサーバーと表示されていました。
Nick

11

オラクルのためにあなたは以下のようなことをすることができます

alter table mytable add (myfield integer);

update mytable set myfield = rownum;

8

そして、Postgresと同等のもの(2行目は、「id」をキーにしたい場合にのみ必須です):

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


3

SQLサーバーのUNIQUEIDENTIFIERデータ型の場合、これを試してください

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

その列から主キーを作成する場合は、これを使用します

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

0

各データベースにはシーケンス番号を追加する方法が異なるため、データベースに依存します。テーブルを変更して列を追加してから、groovy / python / etcにdbスクリプトを記述してデータを読み取り、IDをシーケンスで更新します。データが設定されたら、テーブルの先頭の番号から始まるシーケンスを追加します。データを設定したら、主キーを正しく設定します。


0

新しい列のタイプIDENTITY(自動インクリメント)にしたくない場合、または行の番号付けの順序を具体的にしたい場合は、タイプの列を追加して、次のINT NULLように入力します。私の例では、新しい列はMyNewColumnと呼ばれ、テーブルの既存の主キー列は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  

これはSQL Sever 2005以降で機能します。 ROW_NUMBER()

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.