Frage Ändern einer Spalte: null zu nicht null


Ich habe eine Tabelle mit mehreren nullbaren Ganzzahlspalten. Dies ist aus verschiedenen Gründen unerwünscht, daher suche ich nach allen Nullen auf 0 und setze dann diese Spalten auf NOT NULL. Abgesehen von Nullen zu ändern 0Daten müssen erhalten bleiben.

Ich suche nach dem spezifische SQL-Syntax eine Spalte ändern (nennen Sie es ColumnA) zu "not null". Nehmen wir an, die Daten wurden so aktualisiert, dass sie keine Nullen enthalten.

Verwenden SQL Server 2000.


1023
2018-03-27 13:24


Ursprung


Antworten:


Lassen Sie zuerst alle aktuellen NULL-Werte verschwinden:

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

Aktualisieren Sie dann die Tabellendefinition, um NULL zu verbieten:

ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL

1732
2018-03-27 13:30



Ich hatte das gleiche Problem, aber das Feld standardmäßig Null, und jetzt möchte ich es auf 0 default. Das erforderte eine weitere Zeile nach MDB-Lösung hinzufügen:

ALTER TABLE [Table] ADD CONSTRAINT [Constraint] DEFAULT 0 FOR [Column];

47
2018-06-15 20:45



Sie müssen es in zwei Schritten tun:

  1. Aktualisieren Sie die Tabelle so, dass in der Spalte keine Nullen vorhanden sind.
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

29
2018-03-27 13:34



Für Oracle 11g konnte ich das Spaltenattribut wie folgt ändern:

ALTER TABLE tablename MODIFY columnname datatype NOT NULL;

Sonst schien Abatichevs Antwort gut zu sein. Sie können die Änderung nicht wiederholen - es klagt (zumindest in SQL Developer), dass die Spalte bereits nicht null ist.


21
2017-09-17 21:13



Solange die Spalte kein eindeutiger Bezeichner ist

UPDATE table set columnName = 0 where columnName is null

Dann

Ändern Sie die Tabelle, und legen Sie das Feld auf nicht null fest, und geben Sie einen Standardwert von 0 an


16
2018-03-27 13:26



das hat bei mir funktioniert:

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

15
2018-06-05 13:00



Das scheint einfacher, funktioniert aber nur bei Oracle:

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

Darüber hinaus können Sie auch Spalten hinzufügen und nicht nur ändern. Es wird in diesem Beispiel auf den Standardwert (0) aktualisiert, wenn der Wert null war.


5
2018-03-04 07:55



Im Falle von FOREIGN KEY CONSTRAINT... wird es ein Problem geben, wenn '0' in der Spalte der Primärschlüsseltabelle nicht vorhanden ist. Die Lösung dafür ist ...

SCHRITT 1:

Deaktivieren Sie alle Einschränkungen, die diesen Code verwenden:

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)

SCHRITT 3:

Aktivieren Sie alle Einschränkungen, die diesen Code verwenden:

exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"

2
2017-11-27 17:13