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のみを使用してこれを行う最良の方法は何ですか?
_Primary Key
_ステートメント中に_INSERT INTO
_を追加することは、私が知る限りでは不可能です。ただし、SQL Serverの 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)
_
Accessでは、1つのステートメントで目的を達成できるとは思いません。あなたがする必要があると思うのは...
質問の説明に従って、新しいテーブルを作成します。
次のようにオートナンバー列を追加します。
ALTER TABLE [new_table] ADD COLUMN [ID] AUTOINCREMENT NOT NULL
主キーを追加した列を作成します。
ALTER TABLE [new_table] ADD CONSTRAINT NewTable_PK PRIMARY KEY(ID)
主キーを作成し、同時に挿入する必要性は何ですか?
主キーとテーブルを同時に作成できますが、私の知識では挿入できません。あなたはこれを行うことができます。
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)
これにより、すべてを挿入して必要な列にするだけで済みます。
SQL 2012以降、DateFromParts関数があります。これはもう少し読みやすいと思います。
DATEFROMPARTS(YEAR(<datefield>), MONTH(s.DateEnded), 1)