Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So ändern Sie eine Spalte von Null in Nicht Null in SQL Server

  • Verstehen der Einschränkungen von Daten in NOT NULL-Spalten
    • Vorhandene Spaltendaten aufheben
  • Ändern Sie die Spaltendatenstruktur
    • Geänderte NULL-Zulässigkeit überprüfen

Ändern der Datenstruktur einer Spalte in SQL Server von NULL zu NOT NULL , wodurch Nicht-Null-Werte in dieser Spalte verboten werden, wird im Allgemeinen mit dem relativ einfachen ALTER TABLE durchgeführt Syntax, um die betreffende Spalte entsprechend zu ändern.

In diesem Tutorial untersuchen wir die wichtigen Sicherheitsvorkehrungen, die beim Ändern von bestehenden erforderlich sind Daten in einer Spalte, bevor tatsächlich ein ALTER ausgegeben wird Befehle, die möglicherweise der Tabelle selbst Schaden zufügen würden.

Verstehen der Einschränkungen von Daten in NICHT-NULL-Spalten

Bevor Änderungen an Ihrer Tabelle vorgenommen werden, ist es wichtig, kurz durchzugehen, welche Daten in einer vorhandenen Spalte angegeben werden können (und nicht), die Sie in NOT NULL ändern möchten , wodurch sichergestellt wird, dass keine Zeile einen NULL enthalten darf Wert in dieser Spalte.

Am kritischsten sind alle vorhandenen NULL Werte innerhalb der Spalte müssen vor dem ALTER auf einen Nicht-Null-Wert aktualisiert werden Der Befehl kann erfolgreich verwendet und die Spalte zu NOT NULL gemacht werden . Jeder Versuch, die Spalte auf NOT NULL zu setzen während tatsächlich NULL Daten in der Spalte verbleiben, führt zu einem Fehler und es findet keine Änderung statt.

Unnullifying bestehender Spaltendaten

Um sicherzustellen, dass es keine NULL gibt -Werte in unserer Spalte verwenden wir ein einfaches UPDATE Befehl, der explizit auf Zeilen anwendbar ist, in denen der Wert derzeit NULL ist . Zum Beispiel haben wir eine Basistabelle von client Daten mit name , email , und phone . Derzeit haben einige der Datensätze einen NULL phone Wert, den wir nicht zulassen möchten:

clientsID     name              email                                         phone
1             Neville Estes     [email protected]                         1-843-863-2697
2             Flynn Fry         [email protected]
3             Wyatt Schmidt     [email protected]                          1-950-895-1847
4             Oleg Hill         [email protected]        1-173-344-1578
5             Randall Bullock   [email protected]
6             Lamar White       [email protected]                              1-421-757-4907
7             Fuller Hill       [email protected]                        1-178-437-8281
8             Ulysses Boyle     [email protected]   1-535-515-1494
9             Paki Palmer       [email protected]
10            Kamal Buchanan    [email protected]           1-325-847-4838

Daher können wir einen Standardwert für alle phone einfügen Werte, die derzeit NULL sind mit der folgenden Anweisung:

UPDATE
  clients
SET
  phone = '0-000-000-0000'
WHERE
  phone IS NULL;

Jetzt unser NULL Werte wurden alle durch den Wert ersetzt, den wir als default ansehen , 0-000-000-0000 :

clientsID   name            email                                       phone
1           Neville Estes   [email protected]                       1-843-863-2697
2           Flynn Fry       [email protected]                          0-000-000-0000
3           Wyatt Schmidt   [email protected]                        1-950-895-1847
4           Oleg Hill       [email protected]      1-173-344-1578
5           Randall Bullock [email protected]                                0-000-000-0000
6           Lamar White     [email protected]                            1-421-757-4907
7           Fuller Hill     [email protected]                      1-178-437-8281
8           Ulysses Boyle   [email protected] 1-535-515-1494
9           Paki Palmer     [email protected]                             0-000-000-0000
10          Kamal Buchanan  [email protected]         1-325-847-4838

Ändern Sie die Spaltendatenstruktur

Jetzt, wo es keine NULL gibt Werte nicht länger, können wir unseren ALTER ausgeben -Anweisung, um die Spalte zu aktualisieren, sodass alle zukünftigen Hinzufügungen NULL nicht zulassen Werte. Da wir das phone ändern Spalte in diesem Beispiel sieht die Anweisung etwa so aus:

ALTER TABLE
  clients
ALTER COLUMN
  phone
    NVARCHAR(20) NOT NULL;

Geänderte Nullfähigkeit überprüfen

Nachdem die Änderung an Ihrer Spalte vorgenommen wurde, empfiehlt es sich, zu überprüfen, ob die Spalte NULL mehr zulässt Werte, indem Sie ein einfaches INSERT ausführen testen und versuchen, einen neuen Datensatz mit dem NULL einzufügen Wert in der geänderten Spalte:

INSERT INTO
  clients(name, email, phone)
VALUES
  ('John Doe', '[email protected]', NULL);

Wenn alles nach Plan verlief, gibt SQL Server einen Fehler aus, der besagt, dass die Spalte NULL nicht zulässt Werte:

Cannot insert the value NULL into column 'phone', table 'library.dbo.clients'; column does not allow nulls. INSERT fails. [SQL State=23000, DB Errorcode=515]