1

私はNetbeansを使用しており、Javaで記述し、Derbyを使用しています。

APP内にPERSONというテーブルがあります。PERSON内に、次のプロパティを持つPIDという列があります。

Name: PID
Nulls allowed: [ ]
Data type: NUMERIC
Column size: 4
Decimal digits: 0
Position: 1
Part of a primary key: [/]
Part of an index: [/]

メタデータのisAutoIncrement関数を使用して、すでに自動インクリメントされているかどうかを確認しましたが、そうではありません。

それ以来、次のSQLコマンドを使用して変更しようとしました。

私はこれがダービーのためではなかったかもしれないと信じています:

ALTER TABLE APP.PERSON ALTER PID NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY 
(START WITH 1, INCREMENT BY 1); 

OracleのWebサイトを確認したところ、正しい構文が見つかりました。

ALTER TABLE APP.PERSON ALTER PID SET INCREMENT BY 1;

私も先行ゼロを試しました:

ALTER TABLE APP.PERSON ALTER PID SET INCREMENT BY 0001;

どれも機能していません。最後の2つで発生するエラーは次のとおりです。

ALTER TABLE '"APP"."PERSON"' specified attributes for column 'PID' that are 
not compatible with the existing column.

正しい構文のアイデアはありますか?

4

2 に答える 2

1

これを達成するために私が一般的に行うことは次のとおりです。

  1. 生成された主キーを含む、目的のスキーマを使用して新しいテーブルを作成します
  2. INSERT INTO newtable SELECT columns FROM oldtableを発行して、古いテーブルから新しいテーブルのデータを入力します
  3. 古いテーブルの名前をtable_soon_to_be_deletedなどの一時的な名前に変更します
  4. 新しいテーブルの名前を目的のテーブル名に変更します
  5. 私の行動が期待どおりであることを確認するためにいくつかのテストを行います
  6. 手順(4)で名前を変更した古いテーブルを削除します。
于 2013-02-13T21:47:36.473 に答える
0

JavaDBでは、生成されたキーワードを使用して列を変更することはできないため、テーブルを再作成し、主キーを自動インクリメントとして指定するのが最善の方法であることがわかりました。例えば;

create table staff(
   ID int primary key always generated as identity,
   name varchar(100)
);

これは私のために働いた。

于 2022-01-28T06:46:03.283 に答える