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.
ColumnA
) na "not null
". Załóżmy, że dane zostały zaktualizowane, aby nie zawierały wartości null.
Using SQL server 2000 .
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
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];
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:
- zaktualizuj tabelę tak, aby w kolumnie nie było null.
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
- Zmień tabelę, aby zmienić właściwość kolumny
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL
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.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
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;
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.
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.
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"
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.
- 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
- 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:
- 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:
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;
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