2010-08-10 8 views
6

Estoy tratando de alterar la compañía tabla llamada, pero mostrará el errormesa Alter añadir sintaxis de la columna en SQL

syntax error at or near "(" 
LINE 2: ADD(company_access_level short NOT NULL, 

Mi sintaxis es

ALTER TABLE company 
ADD company_access_level short NOT NULL, 
workgroup_level short NOT NULL, 
Company Logon URL character varying NOT NULL, 
Company Logoff URL character varying NOT NULL 

Gracias

+2

El mensaje de error tiene un paréntesis y la sintaxis que publicó no. ¿Estás seguro de que los dos están sincronizados? ¿Y qué RDBMS estás usando? Estoy bastante seguro de que tendrás que delimitar los nombres de las columnas que contienen espacios de alguna manera (probablemente entre comillas) –

+0

Estoy usando postgresql – lakshmi

Respuesta

20

Acabo de probar esta sintaxis fija en postgressql y funcionó. No hay ningún tipo de datos short, así que tendrá que usar algo más (¿quizás smallint?) Si su tabla contiene datos, esta secuencia de comandos fallará por los motivos en la respuesta de John.

ALTER TABLE company 
ADD company_access_level int NOT NULL, 
ADD workgroup_level int NOT NULL, 
ADD "Company Logon URL" character varying NOT NULL, 
ADD "Company Logoff URL" character varying NOT NULL 
3

también , si su tabla tiene datos, no puede agregar columnas NOT NULL (y para algunos RDBMS no puede agregar columnas NOT NULL incluso cuando no hay datos presentes en la tabla).

Proporcione un valor predeterminado o permita que la columna sea NULLable. Siempre puede llenar las nuevas columnas con datos y modificar las columnas para que NO sean NULAS después.

0

Lo siento por la apertura de una vieja pregunta tal, sino el consejo en una de las respuestas que no se podía añadir un NO NULO me costó un poco de problemas. Usted CAN agrega una columna NOT NULL a una tabla con datos, la única restricción es que también debe proporcionar un valor predeterminado. Probado con Sybase, Postgres y MySQL. El ejemplo anterior se convierte en:

ALTER TABLE company 
ADD company_access_level int default 'not set' NOT NULL , 
ADD workgroup_level int default 0 NOT NULL, 
ADD "Company Logon URL" character varying default 'not set' NOT NULL, 
ADD "Company Logoff URL" character varying default 'not set' NOT NULL 
0

Como alguien que vino aquí con la misma pregunta, no estoy seguro de qué hacer con estas respuestas. Los probé todos, y siempre obtuve un error de sintaxis "cerca" de un término u otro. Después de volver al docs oficial, me di cuenta de que lo que faltaba era una palabra clave adicional, como SET o TYPE. Ejemplos:

por primera vez este

zuri=# ALTER TABLE newarts ALTER COLUMN sunsetdate DATE NULL; ERROR: syntax error at or near "DATE" LINE 2: ALTER COLUMN sunsetdate DATE NULL;

Entonces esto:

zuri=# ALTER TABLE newarts ALTER COLUMN sunsetdate TYPE DATE NULL; ERROR: syntax error at or near "NULL" LINE 2: ALTER COLUMN sunsetdate TYPE DATE NULL;

Sí, todavía hay un error allí, pero una vez que se especifica el significado de la fecha con la palabra clave TIPO del se resolvió el error y pasé a otro. Tuve la misma experiencia con la adición de SET (vea los ejemplos en la misma página de los documentos oficiales que ya cité).

En cuanto a la cuestión específica de NOT NULL, (especialmente en lo relacionado a mi problema de fechas) He leído este answer y parece que ha funcionado - No he tenido un mensaje de error -

zuri=# update lili_code set sunsetdate=NULL; UPDATE 0 

pero luego leí

al finalizar con éxito, un comando UPDATE devuelve una etiqueta de comando de la forma

UPDATE count 

El recuento es el número de filas actualizadas. Si count es 0, no hay filas que coincidan con la condición (esto no se considera un error).

que también está en los documentos oficiales, here.

Finalmente, me dirigí a PGAdminIII, donde encontré que NOT NULL es una casilla de verificación simple. Desmárquelo, problema resuelto. Estoy seguro de que hay una manera de hacer que esto funcione en la línea de comandos con psql, simplemente no lo he encontrado.

Creo que parte de la variación también puede deberse a las diferencias entre ALTER y ACTUALIZACIÓN (ver este SO answer y mi descarado comentario) así como también entre agregar nuevas estructuras (como en la pregunta del OP) y modificar datos ya está allí (como en el mío). La moraleja de la historia, lea la documentación oficial. No lo escanee. Léelo. Y si quiere saber más acerca de NULL y NOT NULL, lea this.

Cuestiones relacionadas