1376 Stimmen

Ändern einer Spalte: null zu nicht null

Ich habe eine Tabelle, die mehrere nullbare Integer-Spalten hat. Dies ist aus mehreren Gründen unerwünscht, daher möchte ich alle Nullen auf 0 aktualisieren und dann diese Spalten auf NOT NULL . Abgesehen von der Änderung von Nullen in 0 müssen die Daten erhalten bleiben.

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

Verwendung von SQL-Server 2000 .

19 Stimmen

Eine andere Sache - Sie könnten eine Voreinstellung hinzufügen, damit alle vorhandenen Einfügungen, die die Spalte nicht angeben, nicht fehlschlagen: ALTER TABLE FOO ADD CONSTRAINT FOO_Bar_Default DEFAULT 0 FOR Bar

5 Stimmen

Es mag Sie auch überraschen, dass unter bestimmten Umständen Ändern einer Spalte in NOT NULL kann eine Menge Protokollierung verursachen.

15voto

Eppz Punkte 3078

Solange es sich bei der Spalte nicht um einen eindeutigen Bezeichner handelt

UPDATE table set columnName = 0 where columnName is null

Dann

Ändern Sie die Tabelle und setzen Sie das Feld auf nicht null und geben Sie einen Standardwert von 0 an.

5voto

csomakk Punkte 5111

Dies scheint einfacher zu sein, funktioniert aber nur unter Oracle:

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

Außerdem können Sie damit auch Spalten hinzufügen, nicht nur ändern. In diesem Beispiel wird auf den Standardwert (0) aktualisiert, wenn der Wert Null war.

5voto

sam05 Punkte 199

Im Falle von FOREIGN KEY CONSTRAINT ... gibt es ein Problem, wenn in der Spalte der Primärschlüsseltabelle keine "0" vorhanden ist. Die Lösung für dieses Problem ist ...

SCHRITT 1:

Deaktivieren Sie alle Beschränkungen mit diesem Code:

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

SCHRITT2:

RUN UPDATE COMMAND (as mentioned in above comments)
RUN ALTER COMMAND (as mentioned in above comments)

SCHRITT3:

Aktivieren Sie alle Beschränkungen mit diesem Code:

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

4voto

Philip Kirkbride Punkte 19451

In meinem Fall hatte ich Schwierigkeiten mit den veröffentlichten Antworten. Am Ende habe ich das Folgende verwendet:

ALTER TABLE table_name CHANGE COLUMN column_name column_name VARCHAR(200) NOT NULL DEFAULT '';

Ändern Sie VARCHAR(200) zu Ihrem Datentyp und ändern Sie optional den Standardwert.

Wenn Sie keinen Standardwert haben, werden Sie ein Problem haben, diese Änderung vorzunehmen, da der Standardwert Null wäre und einen Konflikt verursachen würde.

1voto

Tony L. Punkte 15258

Das Erstellen von Spalten ungleich Null und das Hinzufügen von Standardwerten kann auch in der SSMS-GUI erfolgen.

  1. Wie bereits von anderen erwähnt, können Sie "not null" erst setzen, wenn alle die vorhandenen Daten "nicht null" sind:

UPDATE myTable SET myColumn = 0

  1. Sobald das erledigt ist, können Sie die Tabelle in der Entwurfsansicht (Rechtsklick auf Tabelle und klicken Sie auf "Entwurfsansicht"), können Sie einfach die Markierung der Erlauben Sie Nullen Spalten wie folgt:

enter image description here

  1. In der Entwurfsansicht, in der die Spalte ausgewählt ist, können Sie die Spalteneigenschaften im unteren Fenster und setzen Sie dort den Standardwert ebenfalls auf 0:

enter image description here

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X