Zmienianie kolumny, aby była zerowalna


318

Chcę zmienić kolumnę tabeli, aby była zerowalna. Używałem:

ALTER TABLE Merchant_Pending_Functions Modify NumberOfLocations NULL

To daje błąd w Modify. Jaka jest poprawna składnia?


7
Proszę opublikować komunikat o błędzie w przyszłości
a'r

1
Usunąłem tag SQL Server, ponieważ wygląda na to, że stał się ogólnie darmowy dla wszystkich.
Martin Smith,

Odpowiedzi:


514

Zakładając SQL Server(w oparciu o twoje poprzednie pytania):

ALTER TABLE Merchant_Pending_Functions ALTER COLUMN NumberOfLocations INT NULL

Zamień INTna rzeczywisty typ danych.


43

dla użytkowników bazy danych Oracle 10g:

alter table mytable modify(mycolumn null);

Otrzymujesz „ORA-01735: nieprawidłowa opcja ALTER TABLE”, gdy próbujesz inaczej

ALTER TABLE mytable ALTER COLUMN mycolumn DROP NOT NULL;

Fajnie, nie musisz określać typu danych, po prostu „null”, aby można go było zerować.
Gabe Halsmer

41

Gdyby to była składnia MySQL, tego typu brakuje, jak wskazują niektóre inne odpowiedzi. Prawidłowa składnia MySQL wyglądałaby następująco:

ALTER TABLE Merchant_Pending_Functions MODIFY NumberOfLocations INT NULL

Publikowanie tutaj dla jasności dla użytkowników MySQL.


29

W PostgresQL jest to:

ALTER TABLE tableName ALTER COLUMN columnName DROP NOT NULL;

5

Chociaż nie wiem, jakiego RDBMS używasz, prawdopodobnie musisz podać całą specyfikację kolumny, a nie tylko powiedzieć, że chcesz, aby była zerowalna. Na przykład, jeśli jest obecnie INT NOT NULL, powinieneś go wydać ALTER TABLE Merchant_Pending_Functions Modify NumberOfLocations INT.


To poprawna i opisowa odpowiedź, więc wyjaśnienie, czy Null| NOT NULLnie jest określony, kolumna będzie zerowa.
Hamid Heydarian

4

Jak zauważyli inni, dokładna składnia polecenia różni się w zależności od wersji DBMS. Używana składnia działa w Oracle:

SQL> desc MACAddresses
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COMPUTER                                           NUMBER
 MACADDRESS                                         VARCHAR2(12)
 CORRECTED_MACADDRESS                      NOT NULL VARCHAR2(17)

SQL> alter table MACAddresses
  2       modify corrected_MACAddress null
  3  /

Table altered.

SQL> desc MACAddresses
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COMPUTER                                           NUMBER
 MACADDRESS                                         VARCHAR2(12)
 CORRECTED_MACADDRESS                               VARCHAR2(17)

SQL>

0

W przypadku HSQLDB:

ALTER TABLE tableName ALTER COLUMN columnName SET NULL;

0
ALTER TABLE Merchant_Pending_Functions MODIFY COLUMN `NumberOfLocations` INT null;

To zadziała dla ciebie.

Jeśli chcesz zmienić kolumnę inną niż null, aby zezwolić na wartość null, nie musisz dołączać klauzuli not null. Ponieważ domyślne kolumny nie są puste.

ALTER TABLE Merchant_Pending_Functions MODIFY COLUMN `NumberOfLocations` INT;

0

Zależy to od używanego silnika SQL, w Sybase twoje polecenie działa dobrze:

ALTER TABLE Merchant_Pending_Functions 
Modify NumberOfLocations NULL;

0

Wyrocznia

ALTER TABLE Merchant_Pending_Functions MODIFY([column] NOT NULL);


Czy ta odpowiedź przyniesie nic nowego w stosunku do @ Igors męska odpowiedź ? A co oznacza SQL_SCRIPT?
jpeg
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.