- 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 Quisque@diamProin.com 1-843-863-2697
2 Flynn Fry velit@senectus.net
3 Wyatt Schmidt nibh.dolor@sit.co.uk 1-950-895-1847
4 Oleg Hill lacinia.vitae.sodales@acrisusMorbi.edu 1-173-344-1578
5 Randall Bullock eu@lacus.net
6 Lamar White ut.sem@risus.com 1-421-757-4907
7 Fuller Hill Vivamus.nisi@tempor.ca 1-178-437-8281
8 Ulysses Boyle sem.mollis.dui@Integeraliquamadipiscing.net 1-535-515-1494
9 Paki Palmer nec@euismod.org
10 Kamal Buchanan sapien.gravida@tellusnonmagna.co.uk 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 Quisque@diamProin.com 1-843-863-2697
2 Flynn Fry velit@senectus.net 0-000-000-0000
3 Wyatt Schmidt nibh.dolor@sit.co.uk 1-950-895-1847
4 Oleg Hill lacinia.vitae.sodales@acrisusMorbi.edu 1-173-344-1578
5 Randall Bullock eu@lacus.net 0-000-000-0000
6 Lamar White ut.sem@risus.com 1-421-757-4907
7 Fuller Hill Vivamus.nisi@tempor.ca 1-178-437-8281
8 Ulysses Boyle sem.mollis.dui@Integeraliquamadipiscing.net 1-535-515-1494
9 Paki Palmer nec@euismod.org 0-000-000-0000
10 Kamal Buchanan sapien.gravida@tellusnonmagna.co.uk 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', 'jdoe@domain.com', 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]