SQL définit les valeurs autorisées pour une colonne


8

Je veux faire une ALTER TABLEexpression qui ajoute une nouvelle colonne et définit une valeur par défaut et définit en outre les valeurs autorisées pour cette colonne. Il s'agit d'une colonne de texte et autorisée ne doit être que «valeur1», «valeur2» et «valeur3». La valeur par défaut doit être 'value1'

Selon les diagrammes de syntaxe suivants:

entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici

J'arrive à ce point

ALTER TABLE exampleTable ADD COLUMN new_column VarChar(20) DEFAULT 'value1' 

mais je ne sais absolument pas comment définir les valeurs autorisées.

Est-il possible de faire quelque chose comme

CONSTRAINT CHECK new_column IN ('valeur1', 'valeur2', 'valeur3)

? Je dois admettre que le search conditiondiagramme me dérange assez.

Réponses:


14
alter table ExampleTable
    add (new_column varchar(20) default 'value1',
         constraint ckExampleTable check (new_column in ('value1', 'value2', 'value3')));

1
@Phil - En dehors de l' goapparence valide selon ma lecture du diagramme et fonctionne très bien dans Oracle sql fiddle
Martin Smith

5

Vous devez en fait le faire sous la forme de deux instructions différentes:

ALTER TABLE test
    ADD new_column VARCHAR(20) DEFAULT 'value1'

ALTER TABLE test
    ADD CONSTRAINT CK_exampleTable_newColumn CHECK (new_column IN ('value1','value2','value3'))

En tant que note, il s'agit de la syntaxe SQL Server car j'ai répondu à la question avant le moment où elle avait la balise Oracle et semblait être SQL Server pour moi.
cfradenburg

0

Serveur SQL:

ALTER TABLE table_name
    ADD CONSTRAINT constraint_name CHECK (column_name IN ('aaa', 'bbb', ...))
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.