- Pochopení omezení dat ve sloupcích NOT NULL
- Zrušení platnosti stávajících dat sloupce
- Změňte datovou strukturu sloupců
- Ověřte změněnou možnost neplatnosti
Změna datové struktury sloupce v SQL Server z NULL
na NOT NULL
, čímž se v tomto sloupci zakazují hodnoty, které nejsou nulové, se obecně provádí pomocí relativně jednoduchého ALTER TABLE
syntaxi, aby se příslušný sloupec vhodně změnil.
V tomto tutoriálu prozkoumáme důležitá bezpečnostní opatření nezbytná při změně stávajících data ve sloupci před skutečným vydáním ALTER
příkazy, které by potenciálně mohly poškodit samotnou tabulku.
Vysvětlení omezení dat ve sloupcích NOT NULL
Před provedením jakýchkoli změn v tabulce je důležité krátce projít, jaká data lze (a nelze) zadat v existujícím sloupci, který chcete změnit na NOT NULL
, zajistí, že žádný řádek nesmí mít NULL
hodnotu v tomto sloupci.
Nejdůležitější je, že všechny existující NULL
hodnoty ve sloupci musí být aktualizován na nenulovou hodnotu před ALTER
příkaz lze úspěšně použít a sloupec vytvořit NOT NULL
. Jakýkoli pokus o nastavení sloupce na NOT NULL
zatímco aktuální NULL
data zůstávající ve sloupci budou mít za následek chybu a nedojde k žádné změně.
Zrušení platnosti stávajících dat sloupce
Aby se zajistilo, že neexistují žádné NULL
hodnoty v našem sloupci, použijeme základní UPDATE
příkaz, použitelný explicitně na řádky, kde je aktuálně hodnota NULL
. Máme například základní tabulku client
data s name
, email
a phone
. V současné době má několik záznamů NULL
phone
hodnotu, kterou nechceme povolit:
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
Proto můžeme vložit výchozí hodnotu pro všechny phone
hodnoty, které jsou aktuálně NULL
s následujícím prohlášením:
UPDATE
clients
SET
phone = '0-000-000-0000'
WHERE
phone IS NULL;
Nyní naše NULL
hodnoty byly všechny nahrazeny hodnotou, kterou považujeme za default
, 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
Změňte datovou strukturu sloupců
Nyní, když nejsou žádné NULL
hodnoty, můžeme vydat náš ALTER
příkaz k aktualizaci sloupce tak, aby všechna budoucí přidání neumožňovala NULL
hodnoty. Protože měníme phone
v tomto příkladu bude příkaz vypadat nějak takto:
ALTER TABLE
clients
ALTER COLUMN
phone
NVARCHAR(20) NOT NULL;
Ověřit změněnou možnost nullability
Po provedení změny sloupce je dobrým zvykem ověřit, že sloupec již nepovoluje NULL
hodnoty spuštěním jednoduchého INSERT
test a pokus o vložení nového záznamu s NULL
hodnota ve změněném sloupci:
INSERT INTO
clients(name, email, phone)
VALUES
('John Doe', '[email protected]', NULL);
Pokud vše proběhlo podle plánu, SQL Server vydá chybu, že sloupec neumožňuje NULL
hodnoty:
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]