SQL establece valores permitidos para una columna

8

Quiero hacer una ALTER TABLEexpresión que agregue una nueva columna y establezca un valor predeterminado y, además, defina los valores permitidos para esa columna. Es una columna de texto, y se debe permitir solo 'value1', 'value2' y 'value3'. El valor predeterminado debe ser 'valor1'

De acuerdo con los siguientes diagramas de sintaxis:

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Estoy llegando a este punto

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

pero no estoy seguro de cómo establecer los valores permitidos.

¿Es posible hacer algo como

CONSTRAINT CHECK new_column IN ('valor1', 'valor2', 'valor3)

? Debo admitir que el search conditiondiagrama me confunde bastante.

Valentino Ru
fuente

Respuestas:

14
alter table ExampleTable
    add (new_column varchar(20) default 'value1',
         constraint ckExampleTable check (new_column in ('value1', 'value2', 'value3')));
Keith Tate
fuente
1
@ Phil - Aparte del goaspecto válido según mi lectura del diagrama y funciona bien en Oracle sql fiddle
Martin Smith
5

En realidad, debe hacer esto como dos declaraciones diferentes:

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'))
Cfradenburg
fuente
Como nota, esta es la sintaxis de SQL Server, ya que respondí la pregunta antes de cuando tenía la etiqueta de Oracle y parecía ser SQL Server para mí.
cfradenburg
0

Servidor SQL:

ALTER TABLE table_name
    ADD CONSTRAINT constraint_name CHECK (column_name IN ('aaa', 'bbb', ...))
Bohdan
fuente