1


0

アクセステーブルのすべてのプライマリキーを新しい番号に変更する

自動主キー、日付、その他のデータを含むアクセステーブルがあります。 レコードが削除されたため、最初のレコードは36から始まります。 すべての主キーを変更して、1から始まり、日付順に並べられるようにします。 これを行うための最善の方法は何ですか?

私はこれからテーブルを変更したい:

| TestID | Date     | Data |
|  36    | 12/02/09 | .54  |
|  37    | 12/04/09 | .52  |

これに:

| TestID | Date     | Data |
|  1     | 12/02/09 | .54  |
|  2     | 12/04/09 | .52  |

*編集:*入力と回答者に感謝します。 一部の人は私の質問を少し読みすぎていたと思いますが、それは私の学習と思考のプロセスに追加されるので大丈夫です。 私の質問の目的は2つありました。1)_me_が私のデータの日付の順序とPKを一致させることと、2)このようなことが後で使用できるかどうかを知ることです。 たとえば、テストに番号を付けたり、テストのタイプにラベルを付けたりする新しい列をテーブルに追加する場合など 私は今すぐにたくさんのことを学ぼうとしているので、どこから始めればよいか少し混乱します。 .NETアプリを構築し、SQLとデータベースの管理を学習しようとしていますが、適切な情報をさまざまなRDMSとそれらとやり取りする方法で見つけるのが混乱することがあります。

4 Answer


3


自動インクリメントで新しいテーブルを作成します。

次に、既存のデータをすべて選択し、日付順に並べます。 その結果、IDは「1」から再作成されます。

その後、元のテーブルを削除して、新しいテーブルの名前を変更できます。

外部キーがないと仮定-もしそうなら、それらもドロップして再作成する必要があります。


3


MikeWに従って、次のSQLコマンドを使用して、古いテーブルから新しいテーブルにデータをコピーできます。

INSERT
    TestID, Date, Data
INTO
    NewTable
SELECT
    TestID, Date, Data
FROM
    OldTable;

AutoIncrementフィールドを使用する場合、新しいTestIDは1から始まります。


2


代理主キーとして使用される自動番号はデータではありませんが、関連するテーブルのレコードを接続する以外に何もしないメタデータです。 そのフィールドの値を制御する必要がある場合、それはデータであり、オートナンバーは使用できませんが、独自のオートインクリメントルーチンを実行する必要があります。 開始点についてはhttps://stackoverflow.com/questions/1900452/ms-access-2003-customized-auto-number-ids-for-tables[this thread]をご覧ください。 in Accessは、Accessプログラマーがネット上で集まるあらゆる場所で利用できます。


0


自動生成されたIDENTITY値の値は、コーダーにとっても意味がないはずですが、教育目的では、ADOを使用してIDENTITYを再シードする方法は次のとおりです。

「この変更を行うためのユーザーインターフェイス(UI)で利用可能なオプションはありません」と書かれているため、この記事は古くなっていることに注意してください。後のバージョンのAccessでは、http://office.microsoft.com/en-gb/access/HP030704831033.aspx [ANSI-92クエリモード]のときにSQL DLLを実行できました。 このようなもの:

ALTER TABLE MyTable ALTER TestID INTEGER IDENTITY(1、1)NOT NULL;