it-swarm.com.de

Ändern einer Spalte: null bis nicht null

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.

1162
Karmic Coder

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
1934
mdb

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];
53
Greg Dougherty

Sie müssen dies in zwei Schritten tun:

  1. Aktualisieren Sie die Tabelle, sodass die Spalte keine Nullen enthält.
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
  1. Ändern Sie die Tabelle, um die Eigenschaft der Spalte zu ändern
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL
35
Ralph Wiggum

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.

25
JDM

das hat bei mir geklappt:

ALTER TABLE [Table] 
Alter COLUMN [Column] VARCHAR(50) not null;
17
Dheeraj Sam

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

16
Eppz

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.

5
csomakk

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.

3

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"
2
sam05

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;
0
trooper31

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;
0
Ashish Dwivedi

In der SSMS-Benutzeroberfläche können Sie auch festlegen, dass die Spalte nicht null ist, und Standardeinstellungen hinzufügen.

  1. Wie andere bereits angegeben haben, können Sie nicht "nicht null" setzen, bis alle vorhandenen Daten "nicht null" sind.

UPDATE myTable SET myColumn = 0

  1. Sobald dies erledigt ist, können Sie mit der Tabelle in der Entwurfsansicht (klicken Sie mit der rechten Maustaste auf die Tabelle und klicken Sie auf "Entwurfsansicht") einfach das Häkchen bei Zulassen von Nullen wie damit:

enter image description here

  1. Noch in der Entwurfsansicht mit der ausgewählten Spalte können Sie die Spalteneigenschaften im folgenden Fenster anzeigen und dort den Standardwert auf 0 setzen:

enter image description here

0
Tony L.