Partager via


CREATE TABLE, commande SQL

Crée une table ayant les champs spécifiés.

Le pilote ODBC Visual FoxPro prend en charge la syntaxe native du langage Visual FoxPro pour cette commande. Pour plus d’informations sur le pilote, consultez Les remarques sur les pilotes.

Syntaxe

  
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  

Les arguments

CREATE TABLE | DBF TableName1
Spécifie le nom de la table à créer. Les options TABLE et DBF sont identiques.

NAME LongTableName
Spécifie un nom long pour la table. Un nom de table long ne peut être spécifié que lorsqu’une base de données est ouverte, car les noms de tables longs sont stockés dans des bases de données.

Les noms longs peuvent contenir jusqu’à 128 caractères et peuvent être utilisés à la place de noms de fichiers courts dans la base de données.

LIBRE
Spécifie que la table ne sera pas ajoutée à une base de données ouverte. FREE n’est pas obligatoire si une base de données n’est pas ouverte.

(FieldName1 FieldType [( nFieldWidth [, nPrecision])]
Spécifie respectivement le nom du champ, le type de champ, la largeur du champ et la précision du champ (nombre de décimales).

FieldType est une lettre unique indiquant le type de données du champ. Certains types de données de champ nécessitent que vous spécifiiez nFieldWidth ou nPrecision ou les deux.

nFieldWidth et nPrecision sont ignorés pour les types D, G, I, L, M, P, T et Y. nPrecision est défini par défaut sur zéro (pas de décimales) si nPrecision n’est pas inclus pour les types B, F ou N.

ZÉRO
Autorise les valeurs Null dans le champ.

NON NUL
Empêche les valeurs Null dans le champ.

Si vous omettez NULL et NOT NULL, le paramètre actuel de SET NULL détermine si les valeurs Null sont autorisées dans le champ. Toutefois, si vous omettez NULL et NOT NULL et incluez la clause PRIMARY KEY ou UNIQUE, le paramètre actuel de SET NULL est ignoré et le champ est défini par défaut sur NOT NULL.

CHECK lExpression1
Spécifie une règle de validation pour le champ. lExpression1 peut être une fonction définie par l’utilisateur. Chaque fois qu’un enregistrement vide est ajouté, la règle de validation est cochée. Une erreur est générée si la règle de validation n’autorise pas une valeur de champ vide dans un enregistrement ajouté.

ERROR cMessageText1
Spécifie le message d’erreur affiché par Visual FoxPro lorsque la règle de champ génère une erreur. Le message s’affiche uniquement lorsque les données sont modifiées dans une fenêtre Parcourir ou une fenêtre Modifier.

DEFAULT eExpression1
Spécifie une valeur par défaut pour le champ. Le type de données eExpression1 doit être identique au type de données du champ.

CLÉ PRIMAIRE
Crée un index principal pour le champ. La balise d’index primaire porte le même nom que le champ.

UNIQUE
Crée un index candidat pour le champ. La balise d’index candidate porte le même nom que le champ.

Remarque

Les index candidats (créés en incluant l’option UNIQUE dans CREATE TABLE ou ALTER TABLE - SQL) ne sont pas les mêmes que les index créés avec l’option UNIQUE dans la commande INDEX. Un index créé avec l’option UNIQUE dans la commande INDEX autorise les clés d’index en double ; Les index candidats n’autorisent pas les clés d’index dupliquées. Pour plus d’informations sur son option UNIQUE, consultez INDEX .

Les valeurs Null et les enregistrements en double ne sont pas autorisés dans un champ utilisé pour un index principal ou candidat. Toutefois, Visual FoxPro ne génère pas d’erreur si vous créez un index principal ou candidat pour un champ qui prend en charge les valeurs Null. Visual FoxPro génère une erreur si vous tentez d’entrer une valeur null ou dupliquée dans un champ utilisé pour un index principal ou candidat.

REFERENCES TableName2[ TAG TagName1]
Spécifie la table parente à laquelle une relation persistante est établie. Si vous omettez TAG TagName1, la relation est établie à l’aide de la clé d’index primaire de la table parente. Si la table parente n’a pas d’index principal, Visual FoxPro génère une erreur.

Incluez TAG TagName1 pour établir une relation basée sur une balise d’index existante pour la table parente. Les noms des balises d’index peuvent contenir jusqu’à 10 caractères.

La table parente ne peut pas être une table libre.

NOCPTRANS
Empêche la traduction vers une autre page de codes pour les champs caractère et mémo. Si la table est convertie en une autre page de codes, les champs pour lesquels NOCPTRANS a été spécifié ne sont pas traduits. NOCPTRANS ne peut être spécifié que pour les champs caractère et mémo.

L’exemple suivant crée une table nommée mytable contenant deux champs de caractères et deux champs mémo. Le deuxième champ caractère, char2 et le deuxième champ mémo, mémo2, incluent NOCPTRANS pour empêcher la traduction.

CREATE TABLE mytable (char1 C(10), char2 C(10) NOCPTRANS,;  
   memo1 M, memo2 M NOCPTRANS)  

PRIMARY KEY eExpression2TAG TagName2
Spécifie un index principal à créer. eExpression2 spécifie n’importe quel champ ou combinaison de champs dans la table. TAGName2 spécifie le nom de la balise d’index primaire créée. Les noms des balises d’index peuvent contenir jusqu’à 10 caractères.

Étant donné qu’une table ne peut avoir qu’un seul index principal, vous ne pouvez pas inclure cette clause si vous avez déjà créé un index principal pour un champ. Visual FoxPro génère une erreur si vous incluez plusieurs clauses PRIMARY KEY dans CREATE TABLE.

UNIQUE eExpression3TAG TagName3
Crée un index candidat. eExpression3 spécifie n’importe quel champ ou combinaison de champs dans la table. Toutefois, si vous avez créé un index principal avec l’une des options PRIMARY KEY, vous ne pouvez pas inclure le champ spécifié pour l’index principal. TAGName3 spécifie un nom de balise pour la balise d’index candidate créée. Les noms des balises d’index peuvent contenir jusqu’à 10 caractères.

Une table peut avoir plusieurs index candidats.

FOREIGN KEY eExpression4TAG TagName4[NODUP]
Crée un index étranger (non primaire) et établit une relation avec une table parente. eExpression4 spécifie l’expression de clé d’index étrangère et TagName4 spécifie le nom de la balise de clé d’index étrangère créée. Les noms des balises d’index peuvent contenir jusqu’à 10 caractères. Incluez NODUP pour créer un index étranger candidat.

Vous pouvez créer plusieurs index étrangers pour la table, mais les expressions d’index étrangers doivent spécifier différents champs dans la table.

REFERENCES TableName3[TAG TagName5]
Spécifie la table parente à laquelle une relation persistante est établie. Incluez TAG TagName5 pour établir une relation basée sur une balise d’index pour la table parente. Les noms des balises d’index peuvent contenir jusqu’à 10 caractères. Par défaut, si vous omettez TAG TagName5, la relation est établie à l’aide de la clé d’index primaire de la table parente.

CHECK eExpression2[ERROR cMessageText2]
Spécifie la règle de validation de table. ERROR cMessageText2 spécifie le message d’erreur Visual FoxPro s’affiche lorsque la règle de validation de table est exécutée. Le message s’affiche uniquement lorsque les données sont modifiées dans une fenêtre Parcourir ou modifier la fenêtre.

FROM ARRAY ArrayName
Spécifie le nom d’un tableau existant dont le contenu est le nom, le type, la précision et l’échelle pour chaque champ de la table. Le contenu du tableau peut être défini avec la fonction AFIELDS( ).

Notes

La nouvelle table est ouverte dans la zone de travail la plus basse disponible et est accessible par son alias. La nouvelle table est ouverte exclusivement, quel que soit le paramètre actuel de SET EXCLUSIVE.

Si une base de données est ouverte et que vous n’incluez pas la clause FREE, la nouvelle table est ajoutée à la base de données. Vous ne pouvez pas créer une table portant le même nom qu’une table dans la base de données.

Si une base de données est ouverte, CREATE TABLE - SQL nécessite une utilisation exclusive de la base de données. Pour ouvrir une base de données pour une utilisation exclusive, incluez EXCLUSIVE dans OPEN DATABASE.

Si une base de données n’est pas ouverte lorsque vous créez la table, y compris les clauses NAME, CHECK, DEFAULT, FOREIGN KEY, PRIMARY KEY ou REFERENCES génère une erreur.

Remarque

La syntaxe CREATE TABLE utilise des virgules pour séparer certaines options CREATE TABLE. En outre, la clause NULL, NOT NULL, CHECK, DEFAULT, PRIMARY KEY et UNIQUE doit être placée entre parenthèses contenant les définitions de colonne.

Remarques sur le pilote

Lorsque votre application envoie l’instruction ODBC SQL CREATE TABLE à la source de données, le pilote ODBC Visual FoxPro convertit la commande en commande VISUAL FoxProCREATE TABLE à l’aide de la syntaxe indiquée dans le tableau suivant.

Syntaxe ODBC Syntaxe Visual FoxPro
CREATE TABLE base-table-name

(type de données d’identificateur de colonne

[NOT NULL]

[,type de données column-identifier

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

(FieldName1 FieldType

[(nFieldWidth [, nPrecision])]

[NOT NULL])

Lorsque vous créez une table à l’aide du pilote, le pilote ferme la table immédiatement après la création pour autoriser l’accès à la table par d’autres utilisateurs. Cela diffère de Visual FoxPro, ce qui laisse la table ouverte exclusivement lors de la création. Toutefois, si une procédure stockée sur votre source de données contenant une instruction CREATE TABLE s’exécute, la table est laissée ouverte.

Si la source de données est une base de données (fichier .dbc), le pilote ODBC Visual FoxPro crée une table nommée LongTableName portant le même nom que le nom de la table de base.

Utilisation du langage de définition de données (DDL)

Vous ne pouvez pas inclure DDL aux emplacements suivants :

  • Dans une instruction SQL de traitement par lots qui nécessite une transaction

  • En mode de validation manuelle, après une instruction qui a requis une transaction, sauf si votre application appelle d’abord SQLTransact.

Par exemple, si vous souhaitez créer une table temporaire, vous devez créer la table avant de commencer l’instruction nécessitant une transaction. Si vous incluez l’instruction CREATE TABLE dans une instruction SQL batch qui nécessite une transaction, le pilote retourne un message d’erreur.

Voir aussi

ALTER TABLE, commande SQL
Types de données pris en charge (pilote ODBC Visual FoxPro)
INSERT, commande SQL
SELECT, commande SQL