sql >> Databáze >  >> RDS >> Sqlserver

Jak změnit sloupec z hodnoty Null na hodnotu Not Null na serveru SQL Server

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

  1. Prisma, jak vyčistit databázi

  2. Vysvětlení funkce zabezpečení serveru SQL HAS_Permis_BY_Name a její případy použití

  3. Nejlepší nové funkce v PostgreSQL 14

  4. Zaznamenejte všechny dotazy v mysql