17

SELECT INTO SQL 構文を使用して作成されたデータベース テーブルがあります。データベースは Access にあり、約 500,000 行で構成されています。問題は、結合を行うときです。一意なのは行全体です。主キーとしての自動番号 ID フィールドが必要です。

私が現在持っているコードは次のようなものです:

SELECT INTO new_table
FROM 
(SELECT * FROM table a, table b WHERE a.name = b.name)

SELECT INTO クエリに句を追加して、主キーを追加し、1 回のパスでテーブルを作成できる方法があることを期待していましたが、これは可能ですか?

そうでない場合、SQL のみを使用してこれを行う最善の方法は何ですか?

4

3 に答える 3

17

私の知る限り、ステートメントPrimary Key中にaを追加することはできません。INSERT INTOただし、できることは、 SQLServerの関数IDENTITYを使用して自動インクリメントする列を追加することです。IDENTITY()

このようなもの:

SELECT 
    ID = IDENTITY(INT, 1, 1),
    col1,
    col2
INTO new_table 
FROM (SELECT * FROM table a, table b WHERE a.name = b.name)
于 2013-03-19T19:52:21.073 に答える
8

Access では、1 つのステートメントで目的を達成できるとは思いません。あなたがする必要があると思うことは...

  1. 質問で説明したように、新しいテーブルを作成します。

  2. 次のように AutoNumber 列を追加します。

    ALTER TABLE [new_table] ADD COLUMN [ID] AUTOINCREMENT NOT NULL

  3. 追加したばかりの列を主キーにします。

    ALTER TABLE [new_table] ADD CONSTRAINT NewTable_PK PRIMARY KEY (ID)

于 2013-03-19T21:43:23.450 に答える
0

主キーの作成と挿入を同時に行う必要はありますか?

主キーとテーブルを同時に作成することはできますが、私の知る限りでは作成できません。あなたはこれを行うことができます。

create table Tester 
(
Id int identity
    constraint PK_Id primary key(Id),
    description varchar(256)
)


insert into Tester
Select description
from table

または、テーブルがまだ存在しないことを確認してこのスクリプトを大量に実行する場合は、ドロップを追加して作成します。一時テーブル'#(something)'は、コードレベルの移動と、完了時にクリーンアップに使用されることを除いて、永続テーブルの多くのルールに従うことができます。

if object_id('(schema).(tablename)') is not null 
   drop table (schema).(tablename)

私は「アイデンティティ」で増え続けるシードを作成しました。デフォルトでは、1から開始し、1ずつ増加します。これは、単純なデータベースの主キーが必要とする95%に対応します。自動的にインクリメントするので、心配する必要はありません。次のようなものがある場合は、特定の値だけに挿入することもできます。

insert into table (col1, col2)

これにより、すべてを挿入する必要がなくなり、必要な列になります。

于 2013-03-19T19:49:37.297 に答える