sql-server - not - sql server change datatype




Ändern einer Spalte: null zu nicht null (8)

Ich habe eine Tabelle mit mehreren nullbaren Ganzzahlspalten. Dies ist aus verschiedenen Gründen unerwünscht. Daher möchte ich alle Nullwerte auf 0 setzen und diese Spalten dann auf NOT NULL . Neben der Änderung von Nullen auf 0 müssen Daten beibehalten werden.

Ich suche nach der spezifischen SQL-Syntax , um eine Spalte (nennen Sie ColumnA ) zu " not null " zu ändern. Angenommen, die Daten wurden so aktualisiert, dass sie keine Nullen enthalten.

Verwenden von SQL Server 2000 .


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.


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.


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];

Im Fall von FOREIGN KEY CONSTRAINT ... tritt ein Problem auf, wenn in der Spalte der Primärschlüssel-Tabelle '0' 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"

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

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

Wenn Sie die Spalte nicht auf Null setzen und den Standardwert hinzufügen, können Sie dies auch in der SSMS-GUI tun.

  1. Wie andere bereits gesagt haben, können Sie nicht "not null" setzen, bis alle vorhandenen Daten wie folgt "nicht null" sind:

UPDATE myTable SET myColumn = 0

  1. Sobald dies erledigt ist, können Sie mit der Tabelle in der Entwurfsansicht (Rechtsklick auf die Tabelle und Klicken auf "Entwurfsansicht") einfach die Spalten "Nullwerte zulassen" deaktivieren :

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


das hat bei mir funktioniert:

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




alter-column