既存のレガシーデータベースに列を追加し、各レコードに異なる値を割り当てることができる手順を記述したいと思います。列を追加し、そのデータを自動生成するようなもの。
同様に、"ID"(数値)という新しい列を追加する場合は、各レコードに一意の値を初期化します。したがって、私のID 列にはsayのレコードが含まれます1 to 1000。
それ、どうやったら出来るの?
既存のレガシーデータベースに列を追加し、各レコードに異なる値を割り当てることができる手順を記述したいと思います。列を追加し、そのデータを自動生成するようなもの。
同様に、"ID"(数値)という新しい列を追加する場合は、各レコードに一意の値を初期化します。したがって、私のID 列にはsayのレコードが含まれます1 to 1000。
それ、どうやったら出来るの?
回答:
これはデータベースによって異なりますが、SQL Serverの場合、次のようにして実現できます。
alter table Example
add NewColumn int identity(1,1)
Prevent saving changes that require table re-creationチェックボックスがオフになっているので、チェックボックスをオフにします。ID 列を追加するには、 gui。
使用しているSQLデータベースを投稿すると役立ちます。MySQLの場合、おそらくauto_incrementが必要です。
ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY
ただし、これが値をさかのぼって適用するかどうかはわかりません。そうでない場合は、ストアドプロシージャまたは単純なプログラムで(他のユーザーがデータベースに書き込んでいない限り)値を反復処理し、LAST_INSERT_ID()関数を使用してid値を生成できます。
そして、Postgresと同等のもの(2行目は、「id」をキーにしたい場合にのみ必須です):
ALTER TABLE tableName ADD id SERIAL;
ALTER TABLE tableName ADD PRIMARY KEY (id);
ALTER TABLEを使用するだけで動作するはずです。適切なタイプとIDENTITYフラグを使用して列を追加すると、トリックが実行されます
ALTER TABLE構文に関するこのMSDNの記事http://msdn.microsoft.com/en-us/library/aa275462(SQL.80).aspxを確認してください。
新しい列のタイプ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()