2010-08-10 8 views
6

hinzufügt Ich versuche, die Tabelle mit dem Namen Firma zu ändern, aber es wird den FehlerAlte Tabellenspalte Syntax in SQL

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

Meine Syntax ist

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 

Dank

+2

Die Fehlermeldung enthält Klammern und die von Ihnen gepostete Syntax nicht. Sind Sie sicher, dass die beiden synchron sind? Und welche RDBMS verwenden Sie? Ich bin mir ziemlich sicher, dass Sie die Spaltennamen, die Leerzeichen enthalten, auf irgendeine Weise abgrenzen müssen (wahrscheinlich in Anführungszeichen) –

+0

Ich benutze postgresql – lakshmi

Antwort

20

Ich habe gerade diese feste Syntax in postgressql versucht und es hat funktioniert. Es gibt keinen short Datentyp, aber Sie müssen etwas anderes verwenden (vielleicht smallint?) Wenn Ihre Tabelle Daten enthält, wird dieses Skript aus den Gründen in Johns Antwort fehlschlagen.

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

Auch anzeigen Wenn Ihre Tabelle Daten enthält, können Sie keine NOT NULL-Spalten hinzufügen (und bei einigen RDBMS können Sie keine NOT NULL-Spalten hinzufügen, auch wenn in der Tabelle keine Daten vorhanden sind).

Entweder einen Standardwert angeben oder zulassen, dass die Spalte NULL-fähig ist. Sie können die neuen Spalten immer mit Daten füllen und anschließend die Spalten als NOT NULL ändern.

0

Entschuldigung für das Öffnen einer solchen alten Frage, aber der Ratschlag in einer der Antworten, dass Sie kein NOT NULL hinzufügen konnten, kostete mich ziemlich viel Ärger. Sie CAN fügen Sie eine NOT NULL-Spalte zu einer Tabelle mit Daten hinzu, die einzige Einschränkung ist, dass Sie auch einen Standardwert angeben müssen. Getestet mit Sybase, Postgres und MySQL. Also das obige Beispiel wird:

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

Als jemand, der hier mit der gleichen Frage kam, bin ich mir nicht sicher, was ich von diesen Antworten halten soll. Ich habe sie alle ausprobiert und bekam immer einen Syntaxfehler "nahe" dem einen oder anderen Begriff. Nachdem ich zum offiziellen docs zurückgekehrt war, wurde mir klar, dass ein zusätzliches Schlüsselwort wie SET oder TYPE fehlte. Beispiele:

erster dieses

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

Dann folgt aus:

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;

Ja, es ist immer noch ein Fehler, aber einmal angegeben ich die Bedeutung von DATE mit dem Schlüsselwort TYPE die Fehler wurde behoben und ich ging zu einem anderen weiter. Ich hatte die gleiche Erfahrung mit dem Zusatz von SET (siehe die Beispiele auf der gleichen Seite der offiziellen Dokumente, die ich bereits zitiert habe).

In Bezug auf das spezifische Problem der NOT NULL, (vor allem als es um meine Ausgabe von Terminen bezieht) las ich diese answer und es schien zu funktionieren - ich nicht eine Fehlermeldung erhalten hat -

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

aber dann las ich

Bei erfolgreichem Abschluss wird ein UPDATE Befehl gibt einen Befehl Tag des Formulars

UPDATE count 

Die Anzahl ist die Anzahl der aktualisierten Zeilen. Wenn count 0 ist, haben keine Zeilen die Bedingung erfüllt (dies wird nicht als Fehler betrachtet).

Das ist auch in der offiziellen Dokumentation, here.

Schließlich wandte ich mich an PGAdminIII, wo ich feststellte, dass NOT NULL ein einfaches Kontrollkästchen ist. Deaktivieren Sie es, Problem gelöst. Ich bin sicher, es gibt eine Möglichkeit, dies mit psql an der Kommandozeile zu machen, ich habe es einfach nicht gefunden.

Ich denke, einige der Variation kann auch auf die Unterschiede zwischen ALTER und UPDATE (siehe SO answer und meine freche Kommentar) sowie zwischen dem Hinzufügen neuer Strukturen (wie in der OP-Frage) und Ändern von Daten, die ist schon da (wie bei mir). Die Moral der Geschichte, lesen Sie die offizielle Dokumentation. Scanne es nicht. Lies es. Und wenn Sie mehr über NULL und NOT NULL erfahren möchten, lesen Sie this.