Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да промените колона от Null на Not Null в SQL Server

  • Разбиране на ограниченията на данните в колони NOT NULL
    • Отмяна на съществуващи данни в колона
  • Променете структурата на данните в колоната
    • Проверка на променената нулиране

Промяна на структурата на данните на колона в SQL Server от NULL до NOT NULL , като по този начин се забраняват ненулеви стойности в тази колона, обикновено се изпълнява с помощта на относително простия ALTER TABLE синтаксис, за да промените по подходящ начин въпросната колона.

В този урок ще разгледаме важните предпазни мерки, необходими при промяна на съществуващи данни в колона, преди действително да издадете ALTER команди, които потенциално биха причинили вреда на самата таблица.

Разбиране на ограниченията на данните в колони NOT NULL

Преди да бъдат направени каквито и да е промени във вашата таблица, важно е накратко да прегледате какви данни могат (и не могат) да бъдат посочени в съществуваща колона, която искате да промените на NOT NULL , като се гарантира, че нито един ред не може да има NULL стойност в тази колона.

Най-критичното е, че всички съществуващи NULL стойности в колоната трябва се актуализира до стойност, различна от нула преди ALTER командата може да се използва успешно и колоната да е NOT NULL . Всеки опит за задаване на колоната на NOT NULL докато действително NULL данните, останали в колоната, ще доведат до грешка и няма да настъпи промяна.

Отмяна на данни за съществуващи колони

За да се гарантира, че няма NULL стойности в нашата колона, ще използваме основен UPDATE команда, приложима изрично към редове, където стойността в момента е NULL . Например, имаме основна таблица на client данни с name , email и phone . Понастоящем някои от записите имат NULL phone стойност, която не искаме да допускаме:

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

Следователно можем да вмъкнем стойност по подразбиране за всички phone стойности, които в момента са NULL със следното изявление:

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

Сега нашият NULL всички стойности са заменени със стойността, която считаме за 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

Промяна на структурата на данните в колоната

Сега, когато няма NULL повече стойности, можем да издадем нашия ALTER изявление за актуализиране на колоната, така че всички бъдещи допълнения да не позволяват NULL стойности. Тъй като променяме phone колона в този пример, изявлението ще изглежда така:

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

Проверка на променената нулиране

След като бъде направена промяната във вашата колона, добра практика е да се уверите, че колоната вече не позволява никакви NULL стойности, като изпълните прост INSERT тествате и се опитвате да вмъкнете нов запис с NULL стойност в променената колона:

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

Ако всичко вървеше по план, SQL Server ще издаде грешка, в която се посочва, че колоната не позволява NULL стойности:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Възможно ли е да се изпълняват множество DDL изрази в транзакция (в рамките на SQL Server)?

  2. Задействане за предотвратяване на вмъкване за дублиращи се данни от две колони

  3. 5 бързи полезни съвети за SQL Server Производствени администраторите на бази данни

  4. Как да се покаже дата във формат на дата в САЩ в SQL Server (T-SQL)

  5. 5 предимства за сигурността на решенията за наблюдение на базирани в облак бази данни