2010-08-10 79 views
6

我試圖改變公司表命名,但它會顯示錯誤修改表添加列語法SQL

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

我的語法是

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 

感謝

+2

錯誤消息中有一個括號,並且您發佈的語法沒有。你確定兩人同步?你使用的是什麼RDBMS?我敢肯定,你需要以某種方式分隔包含空格的列名(可能用引號括起來) – 2010-08-10 11:23:05

+0

使用postgresql – lakshmi 2010-08-10 11:25:05

回答

20

我只是在postgressql中試過這個固定的語法,它工作。雖然沒有short數據類型,所以你將不得不使用別的東西(也許smallint?)如果你的表包含數據,這個腳本會因爲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

而且,如果表中有數據,則不能添加NOT NULL列(對於某些RDBMS,即使表中沒有數據,也不能添加NOT NULL列)。

要麼提供默認值,要麼允許該列爲NULLable。您始終可以使用數據填充新列,然後將列修改爲NOT NULL。

0

對不起,在你不能添加一個NOT NULL花了我不少麻煩問題的答案一個開這樣一個老問題,但建議。您CAN將NOT NULL列添加到包含數據的表中,唯一的限制是您還必須提供默認值。經過Sybase,Postgres和MySQL測試。所以上面的例子變成:

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

作爲一個誰來到這裏的同一個問題,我不知道該怎麼做這些答案。我嘗試了所有這些,並且總是在一個術語或另一個術語中出現語法錯誤。回到官方docs之後,我意識到缺少的是一個額外的關鍵字,例如SET或TYPE。例子:

首先這個

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

那麼這樣的:

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;

是的,還有一個錯誤出現,但一旦我指定日期的含義與關鍵字類型的錯誤已解決,我轉移到另一個。我在添加SET方面也有同樣的經歷(請參閱我已經引用的官方文檔的同一頁上的示例)。

至於NOT NULL的具體問題,(尤其是因爲它涉及到我的日期問題)我讀這answer和它似乎工作 - 我沒有得到一個錯誤信息 -

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

但後來我讀

成功完成後,UPDATE命令返回的形式

UPDATE count 
的命令標籤

計數是更新的行數。如果count爲0,則沒有行 匹配條件(這不被視爲錯誤)。

這也在官方文檔中,here

最後,我轉向PGAdminIII,在那裏我發現NOT NULL是一個簡單的複選框。取消它,問題解決了。我確信有一種方法可以在psql的命令行下完成這項工作,但我還沒有找到它。

我認爲一些變化也可能是由於ALTER和UPDATE之間的差異(參見此SO answer和我的厚顏無恥的評論)以及添加新結構(如OP的問題)和修改數據已經在那裏(如我的)。 故事的寓意,請閱讀官方文檔。不要掃描它。閱讀。如果你想知道更多關於NULL和NOT NULL的內容,請閱讀this