プログラムによってテーブルの構造を変更します。
構文
ALTER TABLE TableName1
ADD | ALTER [COLUMN] FieldName1
FieldType [(nFieldWidth [, nPrecision])]
[NULL | NOT NULL]
[CHECK lExpression1 [ERROR cMessageText1]]
[DEFAULT eExpression1]
[PRIMARY KEY | UNIQUE]
[REFERENCES TableName2 [TAG TagName1]]
[NOCPTRANS]
- Or -
ALTER TABLE TableName1
ALTER [COLUMN] FieldName2
[NULL | NOT NULL]
[SET DEFAULT eExpression2]
[SET CHECK lExpression2 [ERROR cMessageText2]]
[DROP DEFAULT]
[DROP CHECK]
- Or -
ALTER TABLE TableName1
[DROP [COLUMN] FieldName3]
[SET CHECK lExpression3 [ERROR cMessageText3]]
[DROP CHECK]
[ADD PRIMARY KEY eExpression3 TAG TagName2]
[DROP PRIMARY KEY]
[ADD UNIQUE eExpression4 [TAG TagName3]]
[DROP UNIQUE TAG TagName4]
[ADD FOREIGN KEY [eExpression5] TAG TagName4
REFERENCES TableName2 [TAG TagName5]]
[DROP FOREIGN KEY TAG TagName6 [SAVE]]
[RENAME COLUMN FieldName4 TO FieldName5]
[NOVALIDATE]
論争
TableName1
構造が変更されたテーブルの名前を指定します。
ADD [COLUMN] FieldName1
追加するフィールドの名前を指定します。
ALTER [COLUMN] FieldName1
変更する既存のフィールドの名前を指定します。
FieldType [( nFieldWidth [, nPrecision]])
新しいフィールドまたは変更されたフィールドのフィールドの種類、フィールドの幅、フィールドの有効桁数 (小数点以下の桁数) を指定します。
FieldType は、フィールドの データ型を示す 1 文字です。 一部のフィールド データ型では、 nFieldWidth または nPrecision またはその両方を指定する必要があります。
nFieldWidth 型と nPrecision 型は、D、G、I、L、M、P、T、Y の型では無視されます。 既定では、 nPrecision が B、F、または N 型に含まれていない場合、 nPrecision は 0 (小数点以下なし) です。
NULL |NOT NULL
フィールド内の null 値を許可または禁止します。
NULL と NOT NULL を省略すると、SET NULL の現在の設定によって、フィールドで null 値が許可されるかどうかが決まります。 ただし、NULL および NOT NULL を省略し、PRIMARY KEY 句または UNIQUE 句を含める場合、SET NULL の現在の設定は無視され、既定ではフィールドは NOT NULL になります。
CHECK lExpression1
フィールドの検証規則を指定します。
lExpression1 は論理式に評価する必要があり、ユーザー定義関数またはストアド プロシージャにすることができます。 空のレコードが追加されるたびに、検証規則がチェックされます。 入力規則で追加レコード内の空白のフィールド値が許可されていない場合、エラーが生成されます。
ERROR cMessageText1
フィールド入力規則でエラーが生成されたときに表示されるエラー メッセージを指定します。
DEFAULT eExpression1
フィールドの既定値を指定します。
eExpression1 のデータ型は、フィールドのデータ型と同じである必要があります。
主キー
プライマリ インデックス タグを作成します。 インデックス タグの名前はフィールドと同じです。
ユニーク
フィールドと同じ名前の候補インデックス タグを作成します。
注
候補インデックス (ALTER TABLE または CREATE TABLE の ANSI 互換性のために提供される UNIQUE オプションを含めて作成) は、INDEX コマンドの UNIQUE オプションを使用して作成されたインデックスとは異なります。 INDEX コマンドで UNIQUE を使用して作成されたインデックスでは、重複するインデックス キーを使用できます。候補インデックスでは、重複するインデックス キーは許可されません。
主インデックスまたは候補インデックスに使用されるフィールドでは、NULL 値と重複レコードは使用できません。
ADD COLUMN を使用して新しいフィールドを作成する場合、NULL 値をサポートするフィールドのプライマリ インデックスまたは候補インデックスを作成しても、Visual FoxPro はエラーを生成しません。 ただし、プライマリ インデックスまたは候補インデックスに使用されるフィールドに null 値または重複値を入力しようとすると、Visual FoxPro によってエラーが生成されます。
既存のフィールドを変更していて、テーブル内のフィールドで構成されているプライマリまたは候補のインデックス式の場合、Visual FoxPro はフィールドをチェックして、NULL 値が含まれているか、重複するレコードが含まれているかを確認します。 その場合、Visual FoxPro はエラーを生成し、テーブルは変更されません。
REFERENCES TableName2 TAG TagName1
永続的なリレーションシップが確立される親テーブルを指定します。 TAG TagName1 では、リレーションシップの基になっている親テーブルのインデックス タグを指定します。 インデックス タグ名には、最大 10 文字を含めることができます。
NOCPTRANS
文字フィールドとメモ 型フィールドの別のコード ページへの変換を禁止します。 テーブルが別のコード ページに変換された場合、NOCPTRANS が指定されているフィールドは変換されません。 NOCPTRANS は、文字フィールドとメモ型フィールドにのみ指定できます。
次の例では、2 つの文字フィールドと 2 つのメモ型フィールドを含む mytable という名前のテーブルを作成します。 2 番目の文字フィールド char2 と 2 番目のメモ フィールド memo2 には、翻訳を防ぐための NOCPTRANS が含まれます。
CREATE TABLE mytable (char1 C(10), char2 C(10) NOCPTRANS,;
memo1 M, memo2 M NOCPTRANS)
ALTER [COLUMN] FieldName2
変更する既存のフィールドの名前を指定します。
SET DEFAULT eExpression2
既存のフィールドの新しい既定値を指定します。
eExpression2 のデータ型は、フィールドのデータ型と同じである必要があります。
SET CHECK lExpression2
既存のフィールドの新しい検証規則を指定します。
lExpression2 は論理式に評価する必要があり、ユーザー定義関数またはストアド プロシージャである可能性があります。
ERROR cMessageText2
フィールド入力規則でエラーが生成されたときに表示されるエラー メッセージを指定します。 メッセージは、[参照] ウィンドウまたは [編集] ウィンドウ内でデータが変更された場合にのみ表示されます。
DROP DEFAULT(デフォルト値を削除)
既存のフィールドの既定値を削除します。
DROP CHECK
既存のフィールドの入力規則を削除します。
DROP [COLUMN] FieldName3
テーブルから削除するフィールドを指定します。 テーブルからフィールドを削除すると、フィールドの既定値設定とフィールド入力規則も削除されます。
インデックス キーまたはトリガー式がフィールドを参照している場合、フィールドが削除されると式が無効になります。 この場合、フィールドが削除されたときにエラーは生成されませんが、無効なインデックス キーまたはトリガー式は実行時にエラーを生成します。
SET CHECK lExpression3
テーブルの検証規則を指定します。
lExpression3 は論理式に評価される必要があり、ユーザー定義関数またはストアド プロシージャである可能性があります。
ERROR cMessageText3
テーブル検証規則でエラーが生成されたときに表示されるエラー メッセージを指定します。 メッセージは、[参照] ウィンドウまたは [編集] ウィンドウ内でデータが変更された場合にのみ表示されます。
DROP CHECK
テーブルの検証規則を削除します。
ADD PRIMARY KEY eExpression3TAG TagName2
テーブルにプライマリ インデックスを追加します。
eExpression3 は主インデックス キー式を指定し、 TagName2 はプライマリ インデックス タグの名前を指定します。 インデックス タグ名には、最大 10 文字を含めることができます。 TAG TagName2 を省略し、 eExpression3 が 1 つのフィールドである場合、プライマリ インデックス タグの名前は eExpression3 で指定されたフィールドと同じです。
DROP PRIMARY KEY
プライマリ インデックスとそのインデックス タグを削除します。 テーブルには主キーを 1 つだけ含めることができるため、主キーの名前を指定する必要はありません。 プライマリ インデックスを削除すると、主キーに基づいて永続的な関係も削除されます。
ADD UNIQUE eExpression4[TAG TagName3]
テーブルに候補インデックスを追加します。
eExpression4 は候補インデックス キー式を指定し、 TagName3 は候補インデックス タグの名前を指定します。 インデックス タグ名には、最大 10 文字を含めることができます。 TAG TagName3 を 省略し、 eExpression4 が 1 つのフィールドの場合、候補インデックス タグは eExpression4 で指定されたフィールドと同じ名前になります。
DROP UNIQUE TAG TagName4
候補インデックスとそのインデックス タグを削除します。 テーブルには複数の候補キーを含めることができるため、候補インデックス タグの名前を指定する必要があります。
ADD FOREIGN KEY [ eExpression5]TAG TagName4
外部 (非primary) インデックスをテーブルに追加します。
eExpression5 は外部インデックス キー式を指定し、 TagName4 は外部インデックス タグの名前を指定します。 インデックス タグ名には、最大 10 文字を含めることができます。
REFERENCES TableName2[TAG TagName5]
永続的なリレーションシップが確立される親テーブルを指定します。 TAG TagName5 を含めて、親テーブルの既存のインデックス タグに基づいてリレーションを確立します。 インデックス タグ名には、最大 10 文字を含めることができます。 TAG TagName5 を省略すると、親テーブルのプライマリ インデックス タグを使用してリレーションシップが確立されます。
DROP FOREIGN KEY TAG TagName6[SAVE]
インデックス タグが TagName6 である外部キーを削除します。 SAVE を省略すると、構造インデックスからインデックス タグが削除されます。 構造インデックスからインデックス タグが削除されないようにするには、SAVE を含めます。
COLUMN FieldName4の名前を FieldName5 に変更する
テーブル内のフィールドの名前を変更できます。
FieldName4 は、名前を変更するフィールドの名前を指定します。
FieldName5 では、フィールドの新しい名前を指定します。
注意事項
インデックス式、フィールドおよびテーブル検証規則、コマンド、および関数が元のフィールド名を参照する場合があるため、テーブル フィールドの名前を変更するときは注意が必要です。
NOVALIDATE
Visual FoxPro でテーブルの構造に対する変更を許可することを指定します。これらの変更は、テーブル内のデータの整合性に違反する可能性があります。 既定では、Visual FoxPro は、ALTER TABLE がテーブル内のデータの整合性に違反する変更を行うことを防ぎます。 この既定の動作をオーバーライドするには、NOVALIDATE を含めます。
注釈
ALTER TABLE を使用して、データベースに追加されていないテーブルの構造を変更できます。 ただし、空きテーブルを変更するときに DEFAULT、FOREIGN KEY、PRIMARY KEY、REFERENCES、または SET 句を含めると、Visual FoxPro によってエラーが生成されます。
ALTER TABLE では、新しいテーブル ヘッダーを作成し、テーブル ヘッダーにレコードを追加することで、テーブルを再構築できます。 たとえば、フィールドの型や幅を変更すると、テーブルが再構築される可能性があります。
テーブルが再構築されると、型または幅が変更されたすべてのフィールドに対してフィールド検証ルールが実行されます。 テーブル内のフィールドの種類または幅を変更すると、テーブル ルールが実行されます。
レコードを含むテーブルのフィールドまたはテーブルの検証規則を変更すると、Visual FoxPro は、既存のデータに対して新しいフィールドまたはテーブルの検証規則をテストし、フィールドまたはテーブルの検証規則が最初に発生したとき、またはトリガー違反の警告を発行します。
変更するテーブルがデータベース内にある場合、ALTER TABLE - SQL ではデータベースを排他的に使用する必要があります。 排他的に使用するためにデータベースを開くには、OPEN DATABASE に EXCLUSIVE を含めます。