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 は、フィールドの データ型を示す 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 のデータ型は、フィールドのデータ型と同じである必要があります。

PRIMARY KEY
プライマリ インデックス タグを作成します。 インデックス タグの名前はフィールドと同じです。

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

注意

候補インデックス (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 eExpression3TAGTagName2
テーブルにプライマリ インデックスを追加します。 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 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 コマンド