ALTER TABLE - SQL コマンド

プログラムによってテーブルの構造を変更します。

構文

  
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 は、フィールドの データ型を示す単一の文字です。 一部のフィールドデータ型では、 Nfieldwidth または nprecision またはその両方を指定する必要があります。

NfieldwidthNprecision は、D、G、I、L、M、P、T、および Y 型では無視されます。 既定では、n精度が B 、F、または N 型に含まれていない場合、 nprecisionはゼロ (小数点以下の桁数なし) になります。

NULL | NOT NULL
フィールドの null 値を許可または禁止します。

Null と NOT NULL を省略すると、SET NULL の現在の設定によって、フィールドで null 値が許可されるかどうかが決まります。 ただし、null および NOT NULL を省略し、PRIMARY KEY または UNIQUE 句を含めると、SET NULL の現在の設定は無視され、既定では、このフィールドは NULL になりません。

LExpression1の確認
フィールドの検証規則を指定します。 lExpression1 は論理式に評価される必要があり、ユーザー定義関数またはストアドプロシージャを指定できます。 空白のレコードが追加されるたびに、検証規則がチェックされます。 追加されたレコードで空のフィールド値が検証規則によって許可されていない場合、エラーが生成されます。

エラー cMessageText1
フィールド検証規則によってエラーが生成された場合に表示されるエラーメッセージを指定します。

既定の eExpression1
フィールドの既定値を指定します。 EExpression1のデータ型は、フィールドのデータ型と同じである必要があります。

PRIMARY KEY
プライマリインデックスタグを作成します。 インデックスタグには、フィールドと同じ名前が付けられています。

UNIQUE
フィールドと同じ名前の候補インデックスタグを作成します。

Note

(ALTER TABLE または CREATE TABLE の ANSI 互換性のために、UNIQUE オプションを含めることによって作成された) 候補インデックスは、INDEX コマンドで UNIQUE オプションを使用して作成されたインデックスとは異なります。 Index コマンドで UNIQUE を使用して作成されたインデックスでは、重複するインデックスキーが許可されます。候補インデックスでは、重複するインデックスキーは許可されません。

プライマリインデックスまたは候補インデックスに使用されるフィールドでは、Null 値と重複レコードは許可されません。

[列の追加] を使用して新しいフィールドを作成する場合、null 値をサポートするフィールドのプライマリインデックスまたは候補インデックスを作成しても、Visual FoxPro ではエラーは生成されません。 ただし、プライマリインデックスまたは候補インデックスに使用するフィールドに null 値または重複値を入力しようとすると、エラーが発生します。

既存のフィールドを変更し、主または候補のインデックス式がテーブル内のフィールドで構成されている場合、Visual FoxPro はフィールドをチェックして、null 値が含まれているか、レコードが重複していないかを確認します。 そうしないと、Visual FoxPro によってエラーが生成され、テーブルは変更されません。

TableName2タグTagName1の参照
永続的なリレーションシップを確立する親テーブルを指定します。 タグ 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
変更する既存のフィールドの名前を指定します。

既定のeExpression2の設定
既存のフィールドの新しい既定値を指定します。 EExpression2のデータ型は、フィールドのデータ型と同じである必要があります。

SET CHECK lExpression2
既存のフィールドの新しい検証規則を指定します。 lExpression2 は論理式に評価される必要があり、ユーザー定義関数またはストアドプロシージャである可能性があります。

エラー cMessageText2
フィールド検証規則によってエラーが生成された場合に表示されるエラーメッセージを指定します。 このメッセージは、[参照] ウィンドウまたは [編集] ウィンドウ内でデータが変更された場合にのみ表示されます。

DROP DEFAULT
既存のフィールドの既定値を削除します。

削除の確認
既存のフィールドの検証規則を削除します。

DROP [列] FieldName3
テーブルから削除するフィールドを指定します。 テーブルからフィールドを削除すると、フィールドの既定値の設定とフィールドの検証規則も削除されます。

インデックスキーまたはトリガー式がフィールドを参照している場合、フィールドが削除されると、式は無効になります。 この場合、フィールドを削除してもエラーは生成されませんが、無効なインデックスキーまたはトリガー式によって実行時にエラーが発生します。

SET CHECK lExpression3
テーブル検証ルールを指定します。 lExpression3 は論理式に評価される必要があり、ユーザー定義関数またはストアドプロシージャである可能性があります。

エラー cMessageText3
テーブル検証ルールがエラーを生成したときに表示されるエラーメッセージを指定します。 このメッセージは、[参照] ウィンドウまたは [編集] ウィンドウ内でデータが変更された場合にのみ表示されます。

削除の確認
テーブルの検証規則を削除します。

主キー eExpression3タグTagName2の追加
テーブルにプライマリインデックスを追加します。 eExpression3 は、主インデックスキーの式を指定し、 TagName2 はプライマリインデックスタグの名前を指定します。 インデックスタグ名には、最大10文字まで含めることができます。 TAG TagName2 が省略され、 eExpression3 が1つのフィールドである場合、プライマリインデックスタグは eExpression3で指定されたフィールドと同じ名前になります。

主キーの削除
プライマリインデックスとそのインデックスタグを削除します。 テーブルには主キーを1つしか含めることができないため、主キーの名前を指定する必要はありません。 プライマリインデックスを削除すると、主キーに基づくすべての永続的な関係も削除されます。

UNIQUE eExpression4の追加 [TAG TagName3]
候補インデックスをテーブルに追加します。 eExpression4 は候補インデックスキー式を指定し、 TagName3 は候補のインデックスタグの名前を指定します。 インデックスタグ名には、最大10文字まで含めることができます。 TAG TagName3 を省略し、 eExpression4 が1つのフィールドである場合、候補インデックスタグの名前は eExpression4で指定されたフィールドと同じになります。

一意のタグの削除 TagName4
候補インデックスとそのインデックスタグを削除します。 テーブルには複数の候補キーを含めることができるので、候補のインデックスタグの名前を指定する必要があります。

ADD FOREIGN KEY [ eExpression5]TAG TagName4
外部 (非プライベート) インデックスをテーブルに追加します。 eExpression5 は 外部インデックス キー式を指定し、 TagName4 は外部インデックス タグの名前を指定します。 インデックス タグ名には、最大 10 文字を含めることができます。

REFERENCES TableName2[TAG TagName5]
永続的なリレーションシップを確立する親テーブルを指定します。 TAG TagName5 を含 め、親テーブルの既存のインデックス タグに基づいて関係を確立します。 インデックス タグ名には、最大 10 文字を含めることができます。 TAG TagName5 を省略すると、親テーブルのプライマリ インデックス タグを使用してリレーションシップが確立されます。

DROP FOREIGN KEY TAG TagName6[SAVE]
インデックス タグが TagName6 の外部キーを削除します。 SAVE を省略すると、インデックス タグは構造インデックスから削除されます。 構造インデックスからインデックス タグが削除されるのを防ぐには、SAVE を含める。

RENAME COLUMN FieldName4TOFieldName5
テーブル内のフィールドの名前を変更できます。 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 を含める必要があります。

参照

CREATE TABLE - SQL コマンド
INDEX コマンド