Set SQL consentito valori per una colonna


8

Voglio creare ALTER TABLEun'espressione che aggiunge una nuova colonna e imposta un valore predefinito e definisce inoltre i valori consentiti per quella colonna. È una colonna di testo e deve essere consentito solo "valore1", "valore2" e "valore3". L'impostazione predefinita dovrebbe essere "valore1"

Secondo i seguenti diagrammi di sintassi:

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

Sto arrivando a questo punto

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

ma non sono assolutamente sicuro di come impostare i valori consentiti.

È possibile fare qualcosa del genere

CONTROLLO VINCITORE new_column IN ('valore1', 'valore2', 'valore3)

? Devo ammettere che il search conditiondiagramma mi sta confondendo.

Risposte:


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

1
@Phil - A parte l' goaspetto valido per la mia lettura del diagramma e funziona benissimo in Oracle sql fiddle
Martin Smith

5

Dovresti effettivamente farlo come due diverse affermazioni:

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'))

Come nota, questa è la sintassi di SQL Server da quando ho risposto alla domanda prima di quando aveva il tag Oracle e mi sembrava SQL Server.
cfradenburg,

0

Server SQL:

ALTER TABLE table_name
    ADD CONSTRAINT constraint_name CHECK (column_name IN ('aaa', 'bbb', ...))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.