Zmiana kolumny: null na not null

Mam tabelę, która ma kilka nullable integer kolumn. Jest to niepożądane z kilku powodów, więc chcę zaktualizować wszystkie NULL do 0, a następnie ustawić te kolumny na NOT NULL. Oprócz zmiany null na 0, Dane muszą być zachowane.

[[4]}Szukam specyficznej składni SQL aby zmienić kolumnę (nazwij ją ColumnA) na "not null". Załóżmy, że dane zostały zaktualizowane, aby nie zawierały wartości null.

Using SQL server 2000 .

Author: Marko, 2009-03-27

11 answers

Najpierw znikną wszystkie bieżące wartości NULL:

UPDATE [Table] SET [Column]=0 WHERE [Column] IS NULL

Następnie zaktualizuj definicję tabeli, aby nie zezwalała na null:

ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL
 1763
Author: mdb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-06 13:48:30

Miałem ten sam problem, ale pole używane do default to null, a teraz chcę go default to 0. Wymagało to dodania jeszcze jednej linii po rozwiązaniu mdb:

ALTER TABLE [Table] ADD CONSTRAINT [Constraint] DEFAULT 0 FOR [Column];
 48
Author: Greg Dougherty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-16 21:44:14

Musisz to zrobić w dwóch krokach:

  1. zaktualizuj tabelę tak, aby w kolumnie nie było null.
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
  1. Zmień tabelę, aby zmienić właściwość kolumny
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL
 31
Author: Ralph Wiggum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-10 15:23:31

Dla Oracle 11g, udało mi się zmienić atrybut kolumny w następujący sposób:

ALTER TABLE tablename MODIFY columnname datatype NOT NULL;
W przeciwnym razie odpowiedź abaticheva wydawała się dobra. Nie możesz powtórzyć alter-skarży się (przynajmniej w SQL Developer), że kolumna już nie jest null.
 21
Author: JDM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-17 21:18:03

O ile kolumna nie jest unikalnym identyfikatorem

UPDATE table set columnName = 0 where columnName is null

Then

Zmień tabelę i ustaw pole na inne niż null i określ domyślną wartość 0

 16
Author: Eppz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-27 13:26:39

To mi pomogło:

ALTER TABLE [Table] 
Alter COLUMN [Column] VARCHAR(50) not null;
 16
Author: Dheeraj Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-05 13:00:20

To wydaje się prostsze, ale działa tylko na Oracle:

ALTER TABLE [Table] 
ALTER [Column] NUMBER DEFAULT 0 NOT NULL;

Dodatkowo, dzięki temu, możesz również dodawać kolumny, a nie tylko je zmieniać. W tym przykładzie aktualizuje się do wartości domyślnej (0), jeśli wartość była null.

 5
Author: csomakk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-31 09:43:26

W moim przypadku miałem trudności z zamieszczonymi odpowiedziami. Skończyło się na tym, że użyłem:

ALTER TABLE table_name CHANGE COLUMN column_name column_name VARCHAR(200) NOT NULL DEFAULT '';

Zmień VARCHAR(200) na swój typ danych i opcjonalnie zmień wartość domyślną.

Jeśli nie masz wartości domyślnej, będziesz miał problem z dokonaniem tej zmiany, ponieważ domyślne byłoby null tworząc konflikt.

 3
Author: Philip Kirkbride,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-26 20:20:09

W przypadku FOREIGN KEY CONSTRAINT... pojawi się problem, jeśli w kolumnie tabeli klucza podstawowego nie występuje "0". Rozwiązaniem na to jest...

Krok 1:

Wyłącz wszystkie ograniczenia używając tego kodu:

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

Krok 2:

RUN UPDATE COMMAND (as mentioned in above comments)
RUN ALTER COMMAND (as mentioned in above comments)

Krok 3:

Włącz wszystkie ograniczenia używając tego kodu:

exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
 2
Author: sam05,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-06 12:24:29

Tworzenie kolumny nie null i dodawanie domyślnej można również wykonać w GUI SSMS.

  1. Jak już stwierdzili inni, nie można ustawić "not null" dopóki wszystkie istniejące dane są "nie null" w ten sposób:

UPDATE myTable SET myColumn = 0

  1. Po zakończeniu, z tabelą w widoku Projekt (kliknij prawym przyciskiem myszy na tabela i kliknij "widok projektu"), możesz po prostu odznaczyć Zezwól Nulls Kolumny jak tak:

Tutaj wpisz opis obrazka

  1. nadal w widoku projektu z kolumną wybrane, możesz zobaczyć Właściwości kolumny W oknie poniżej i ustaw tam wartość domyślną na 0 tak jak tak:

Tutaj wpisz opis obrazka

 1
Author: Tony L.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-07 15:29:03

Dla wbudowanego javaDB dołączonego do JDK (obsługiwanej przez Oracle dystrybucji Apache Derby) poniżej działało dla mnie

alter table [table name] alter column [column name] not null;
 0
Author: trooper31,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-13 00:45:53