すでにレコードが入力されているテーブル内のあるフィールドに対して、1件1件のレコードを一意に識別できるように連番を振りたいと考えています。
更新クエリ1発で簡単にできる方法があれば教えてください。
外部からプログラムでクエリを呼び出すので手操作が介入する方法は使えません。
また、ADO/DAOでレコードを1件1件フェッチしては連番を設定していく、というような方法は分かるので、もっと簡単でスマートな方法を知りたいです。
テーブル内のあるフィールドのデータ型をオートナンバー型にすれば済む話ではありませんか。
特にクエリでする必要も無いはずです。
対象のテーブルをデザインビューで開いて、一意に識別できるように連番を振りたいフィールドのデータ型をオートナンバー型にして保存して開けば
番号が振られますよ。
>1件1件のレコードを一意に識別できるように連番を振りたい
レコードを一意にするためのキーフィールドが別に存在するのであれば
SET 連番フィールド = DCount("*","T","キー <= " & キー);
なんて形で対応できますが、そうではないから連番を振りたいのですよね?
だとすればオートナンバー型フィールドをクエリで追加するのが良いと思いますよ。
ALTER TABLE テーブル名 ALTER COLUMN フィールド名 COUNTER (1,10)
1は初期値、10の部分は増分なので通常は1ですが説明用に見分けやすくするため10と書きました。
お察しいただいているとおり、キーがないテーブルなので連番を振りたいという話なんですが、外部からその番号を任意に与えることもあるのでオートナンバーは使いたくないのです。
ただ、ご回答を応用してオートナンバーCOLUMNを追加した上でそれを目的のフィールドにコピーした後、オートナンバーCOLUMNを削除、というようにすればそれはそれでOKな気もしてきました。
コスト的には1行1行フェッチして値を入れるよりも少し速そうな気がしますね。
何となくテーブル定義をいじるのは美しくない気がするので、もし他にスマートな方法がありましたら引き続きお願い致します。
Uniqueキーが対象テーブルに既にあるのなら、キーとオートナンバーフィールドのテーブルBを作っておき、元テーブルからキーをインサート。で、次はテーブルBのキーを元にオートナンバーを元テーブルに更新(元テーブルには空きフィールドを作っておく)、とか。
前回答のコメントに書いたようにユニークキーはありません。
ついでに思いついたのですが、元テーブルと同じレイアウトの空テーブルを用意しオートナンバーのフィールドを追加しておく。で、元テーブルから空テーブルにインサートすると空テーブル側に追加の際オートナンバーがふられます。
申し訳ありませんが、そう言う話ではありません。