CREATE TABLE - SQL コマンド

指定したフィールドを持つテーブルを作成します。

Visual FoxPro ODBC ドライバーでは、このコマンドのネイティブ Visual FoxPro 言語構文がサポートされています。 ドライバー固有の情報については、「 ドライバーの解説」を参照してください。

構文

  
CREATE TABLE | DBF TableName1 [NAME LongTableName] [FREE]  
   (FieldName1FieldType [(nFieldWidth [, nPrecision])]  
      [NULL | NOT NULL]   
      [CHECK lExpression1 [ERROR cMessageText1]]  
      [DEFAULT eExpression1]  
      [PRIMARY KEY | UNIQUE]  
      [REFERENCES TableName2 [TAG TagName1]]  
      [NOCPTRANS]  
   [, FieldName2 ...]  
      [, PRIMARY KEY eExpression2 TAG TagName2  
      |, UNIQUE eExpression3 TAG TagName3]  
      [, FOREIGN KEY eExpression4 TAG TagName4 [NODUP]  
            REFERENCES TableName3 [TAG TagName5]]  
      [, CHECK lExpression2 [ERROR cMessageText2]])  
| FROM ARRAY ArrayName  

引数

CREATE TABLE |DBF TableName1
作成するテーブルの名前を指定します。 TABLE オプションと DBF オプションは同じです。

NAME LongTableName
テーブルの長い名前を指定します。 長いテーブル名はデータベースに格納されるため、長いテーブル名はデータベースを開いている場合にのみ指定できます。

長い名前には最大 128 文字を含めることができます。また、データベース内の短いファイル名の代わりに使用できます。

FREE
開いているデータベースにテーブルを追加しないことを指定します。 データベースが開いていない場合、FREE は必要ありません。

(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
フィールドで 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
フィールド ルールでエラーが生成されたときに Visual FoxPro に表示されるエラー メッセージを指定します。 メッセージは、[参照] ウィンドウまたは [編集] ウィンドウ内でデータが変更された場合にのみ表示されます。

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

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

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

注意

候補インデックス (CREATE TABLE または ALTER TABLE - SQL に UNIQUE オプションを含めて作成) は、INDEX コマンドの UNIQUE オプションを使用して作成されたインデックスと同じではありません。 INDEX コマンドの UNIQUE オプションを使用して作成されたインデックスでは、重複するインデックス キーを使用できます。候補インデックスでは、重複するインデックス キーは許可されません。 UNIQUE オプションの詳細については、 INDEX を参照してください。

Null 値と重複レコードは、プライマリ インデックスまたは候補インデックスに使用されるフィールドでは許可されません。 ただし、null 値をサポートするフィールドのプライマリ インデックスまたは候補インデックスを作成した場合、Visual FoxPro はエラーを生成しません。 プライマリ インデックスまたは候補インデックスに使用されるフィールドに null 値または重複値を入力しようとすると、Visual FoxPro によってエラーが生成されます。

REFERENCES TableName2[TAG TagName1]
永続的なリレーションシップが確立される親テーブルを指定します。 TAG TagName1 を省略すると、親テーブルの主インデックス キーを使用してリレーションシップが確立されます。 親テーブルにプライマリ インデックスがない場合、Visual FoxPro はエラーを生成します。

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)  

PRIMARY KEY eExpression2 TAG TagName2
作成するプライマリ インデックスを指定します。 eExpression2 は、テーブル内のフィールドまたはフィールドの組み合わせを指定します。 TAG TagName2 は、作成されるプライマリ インデックス タグの名前を指定します。 インデックス タグ名には、最大 10 文字を含めることができます。

テーブルにはプライマリ インデックスを 1 つだけ含めることができるため、フィールドのプライマリ インデックスを既に作成している場合は、この句を含めることはできません。 CREATE TABLE に複数の PRIMARY KEY 句を含める場合、Visual FoxPro はエラーを生成します。

UNIQUE eExpression3TAG TagName3
候補インデックスを作成します。 eExpression3 は、テーブル内のフィールドまたはフィールドの組み合わせを指定します。 ただし、PRIMARY KEY オプションのいずれかを使用してプライマリ インデックスを作成した場合は、プライマリ インデックスに指定されたフィールドを含めることはできません。 TAG TagName3 は、作成される候補インデックス タグのタグ名を指定します。 インデックス タグ名には、最大 10 文字を含めることができます。

1 つのテーブルに複数の候補インデックスを指定できます。

FOREIGN KEY eExpression4TAG TagName4[NODUP]
外部 (非primary) インデックスを作成し、親テーブルとのリレーションシップを確立します。 eExpression4 は外部インデックス キー式を指定し、 TagName4 は作成される外部インデックス キー タグの名前を指定します。 インデックス タグ名には、最大 10 文字を含めることができます。 候補の外部インデックスを作成するには、NODUP を含めます。

テーブルに対して複数の外部インデックスを作成できますが、外部インデックス式ではテーブル内の異なるフィールドを指定する必要があります。

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

CHECK eExpression2[ERROR cMessageText2]
テーブルの検証規則を指定します。 ERROR cMessageText2 は、テーブル検証ルールの実行時に Visual FoxPro に表示されるエラー メッセージを指定します。 メッセージは、[参照] ウィンドウまたは [編集] ウィンドウ内でデータが変更された場合にのみ表示されます。

FROM ARRAY ArrayName
テーブル内の各フィールドの名前、型、有効桁数、および小数点以下桁数を内容とする既存の配列の名前を指定します。 配列の内容は 、AFIELDS( ) 関数で定義できます。

注釈

新しいテーブルは、使用可能な最も低い作業領域で開き、その別名でアクセスできます。 SET EXCLUSIVE の現在の設定に関係なく、新しいテーブルは排他的に開かれます。

データベースが開いている場合に FREE 句を含めない場合、新しいテーブルがデータベースに追加されます。 データベース内のテーブルと同じ名前の新しいテーブルを作成することはできません。

データベースが開いている場合、CREATE TABLE - SQL ではデータベースを排他的に使用する必要があります。 データベースを排他的に開くには、OPEN DATABASE に EXCLUSIVE を含めます。

NAME 句、CHECK 句、DEFAULT 句、FOREIGN KEY 句、PRIMARY KEY 句、REFERENCES 句など、新しいテーブルを作成するときにデータベースが開かない場合は、エラーが発生します。

注意

CREATE TABLE 構文では、コンマを使用して、特定の CREATE TABLE オプションを区切ります。 また、NULL、NOT NULL、CHECK、DEFAULT、PRIMARY KEY、および UNIQUE 句は、列定義を含むかっこ内に配置する必要があります。

ドライバーの備考

アプリケーションが ODBC SQL ステートメント CREATE TABLE をデータ ソースに送信すると、Visual FoxPro ODBC ドライバーは、次の表に示す構文を使用して、コマンドを Visual FoxProCREATE TABLE コマンドに変換します。

ODBC 構文 Visual FoxPro 構文
CREATE TABLE base-table-name

(列識別子のデータ型

[NOT NULL]

[,column-identifier データ型

[NOT NULL] ...)
CREATE TABLE TableName1 [NAME LongTableName]

(FieldName1FieldType

[(nFieldWidth [, nPrecision])]

[NOT NULL])

ドライバーを使用してテーブルを作成すると、ドライバーは作成直後にテーブルを閉じて、他のユーザーがテーブルにアクセスできるようにします。 これは Visual FoxPro とは異なり、作成時にのみテーブルが開いたままになります。 ただし、CREATE TABLE ステートメントを含むデータ ソースのストアド プロシージャを実行すると、テーブルは開いたままになります。

データ ソースがデータベース (.dbc ファイル) の場合、Visual FoxPro ODBC ドライバーは、base-table-name と同じ名前の LongTableName という名前のテーブルを作成します。

データ定義言語 (DDL) の使用

次の場所に DDL を含めることはできません。

  • トランザクションを必要とするバッチ SQL ステートメント内

  • 手動コミット モードでは、アプリケーションが最初に SQLTransact を呼び出す場合を除き、トランザクションを必要とするステートメントの後。

たとえば、一時テーブルを作成する場合は、トランザクションを必要とするステートメントを開始する前にテーブルを作成する必要があります。 トランザクションを必要とするバッチ SQL ステートメントに CREATE TABLE ステートメントを含める場合、ドライバーはエラー メッセージを返します。

参照

ALTER TABLE - SQL コマンド
サポートされるデータ型 (Visual FoxPro ODBC ドライバー)
INSERT - SQL コマンド
SELECT - SQL コマンド