Ich habe eine Tabelle, die mehrere nullable Integer-Spalten hat. Dies ist aus mehreren Gründen unerwünscht. Daher möchte ich alle Nullen auf 0 aktualisieren und diese Spalten dann auf NOT NULL
setzen. Abgesehen davon, dass Nullen in 0
geändert werden, müssen die Daten erhalten bleiben.
Ich suche die spezifische SQL-Syntax, um eine Spalte (nennen Sie es ColumnA
) zu "not null
" zu ändern. Angenommen, die Daten wurden so aktualisiert, dass sie keine Nullen enthalten.
Verwenden von SQL Server 20.
Lassen Sie zunächst alle aktuellen NULL-Werte verschwinden:
UPDATE [Table] SET [Column]=0 WHERE [Column] IS NULL
Aktualisieren Sie anschließend die Tabellendefinition, um NULL-Werte nicht zuzulassen:
ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL
Ich hatte das gleiche Problem, aber das Feld wurde standardmäßig auf null gesetzt, und jetzt möchte ich es auf 0 setzen. Dazu musste nach der Lösung von mdb eine weitere Zeile hinzugefügt werden:
ALTER TABLE [Table] ADD CONSTRAINT [Constraint] DEFAULT 0 FOR [Column];
Sie müssen dies in zwei Schritten tun:
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL
Für Oracle 11g konnte ich das Spaltenattribut wie folgt ändern:
ALTER TABLE tablename MODIFY columnname datatype NOT NULL;
Ansonsten schien Abatichevs Antwort gut zu sein. Sie können die Änderung nicht wiederholen - es wird (zumindest in SQL Developer) beanstandet, dass die Spalte bereits nicht null ist.
das hat bei mir geklappt:
ALTER TABLE [Table]
Alter COLUMN [Column] VARCHAR(50) not null;
Solange die Spalte kein eindeutiger Bezeichner ist
UPDATE table set columnName = 0 where columnName is null
Dann
Ändern Sie die Tabelle, setzen Sie das Feld auf einen Wert ungleich Null und geben Sie den Standardwert 0 an
dies scheint einfacher zu sein, funktioniert aber nur unter Oracle:
ALTER TABLE [Table]
ALTER [Column] NUMBER DEFAULT 0 NOT NULL;
darüber hinaus können Sie damit auch Spalten hinzufügen und nicht nur ändern. Es wird auf den Standardwert (0) in diesem Beispiel aktualisiert, wenn der Wert null war.
In meinem Fall hatte ich Schwierigkeiten mit den geposteten Antworten. Am Ende habe ich Folgendes verwendet:
ALTER TABLE table_name CHANGE COLUMN column_name column_name VARCHAR(200) NOT NULL DEFAULT '';
Ändern Sie VARCHAR(200)
in Ihren Datentyp und ändern Sie optional den Standardwert.
Wenn Sie keinen Standardwert haben, treten Probleme bei der Durchführung dieser Änderung auf, da der Standardwert null ist und einen Konflikt verursacht.
Im Fall von FOREIGN KEY CONSTRAINT
... tritt ein Problem auf, wenn in der Spalte der Primärschlüsseltabelle keine '0' vorhanden ist. Die Lösung dafür ist ...
SCHRITT 1:
Deaktivieren Sie alle Einschränkungen mit diesem Code:
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
SCHRITT 2:
RUN UPDATE COMMAND (as mentioned in above comments)
RUN ALTER COMMAND (as mentioned in above comments)
SCHRITT3:
Aktivieren Sie alle Einschränkungen mit diesem Code:
exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
Für die im JDK (von Oracle unterstützte Distribution des Apache Derby) enthaltene eingebaute JavaDB hat das Folgende für mich funktioniert
alter table [table name] alter column [column name] not null;
Nehmen wir ein Beispiel:
TABLE NAME=EMPLOYEE
Und ich möchte die Spalte EMPLOYEE_NAME
in NOT NULL
ändern. Diese Abfrage kann für die Aufgabe verwendet werden:
ALTER TABLE EMPLOYEE MODIFY EMPLOYEE.EMPLOYEE_NAME datatype NOT NULL;
In der SSMS-Benutzeroberfläche können Sie auch festlegen, dass die Spalte nicht null ist, und Standardeinstellungen hinzufügen.
UPDATE myTable SET myColumn = 0