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