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.