Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak zmienić kolumnę z wartości Null na Not Null w SQL Server

  • Zrozumienie ograniczeń danych w kolumnach NOT NULL
    • Anulowanie istniejących danych kolumny
  • Zmień strukturę danych kolumny
    • Zweryfikuj zmienioną nieważność

Zmiana struktury danych kolumny w SQL Server z NULL na NOT NULL , uniemożliwiając w ten sposób wartości inne niż null w tej kolumnie, jest zwykle wykonywane przy użyciu stosunkowo prostej ALTER TABLE składnię, aby odpowiednio zmienić daną kolumnę.

W tym samouczku przeanalizujemy ważne środki ostrożności niezbędne podczas modyfikowania istniejących dane w kolumnie, przed faktycznym wydaniem jakiejkolwiek ALTER polecenia, które mogłyby spowodować uszkodzenie samego stołu.

Zrozumienie ograniczeń danych w kolumnach NOT NULL

Zanim jakiekolwiek zmiany zostaną wprowadzone do Twojej tabeli, ważne jest, aby krótko przejrzeć, jakie dane można (i nie można) określić w istniejącej kolumnie, którą chcesz zmienić na NOT NULL , upewniając się, że żaden wiersz nie może mieć NULL wartość w tej kolumnie.

Co najważniejsze, wszystkie istniejące NULL wartości w kolumnie muszą być aktualizowane do wartości innej niż null przed ALTER polecenie może być pomyślnie użyte, a kolumna wykonana NOT NULL . Każda próba ustawienia kolumny na NOT NULL podczas gdy rzeczywisty NULL dane pozostające w kolumnie spowodują błąd i nie nastąpią żadne zmiany.

Anulowanie istniejących danych kolumny

Aby upewnić się, że nie ma NULL wartości w naszej kolumnie, użyjemy podstawowej UPDATE polecenie, stosowane jawnie do wierszy, w których wartość jest aktualnie NULL . Na przykład mamy podstawową tabelę client dane z name , email i phone . Obecnie kilka rekordów ma wartość NULL phone wartość, na którą nie chcemy pozwolić:

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

Dlatego możemy wstawić domyślną wartość dla wszystkich phone wartości, które są obecnie NULL z następującym stwierdzeniem:

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

Teraz nasz NULL wszystkie wartości zostały zastąpione wartościami, które uważamy 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

Zmień strukturę danych kolumny

Teraz, gdy nie ma NULL wartości dłużej, możemy wydać nasze ALTER oświadczenie, aby zaktualizować kolumnę, aby wszystkie przyszłe dodatki nie zezwalały na NULL wartości. Ponieważ zmieniamy phone w tym przykładzie, instrukcja będzie wyglądać mniej więcej tak:

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

Weryfikuj zmienioną nieważność

Po dokonaniu zmiany w Twojej kolumnie, dobrą praktyką jest sprawdzenie, czy kolumna nie zezwala już na żadne NULL wartości, uruchamiając proste INSERT test i próba wstawienia nowego rekordu z NULL wartość w zmienionej kolumnie:

INSERT INTO
  clients(name, email, phone)
VALUES
  ('John Doe', 'jdoe@domain.com', NULL);

Jeśli wszystko poszło zgodnie z planem, SQL Server wyświetli błąd informujący, że kolumna nie zezwala na NULL wartości:

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. Jak wstawić dane do SQL Server

  2. 3 sposoby na zwrócenie listy zadań agenta serwera SQL (T-SQL)

  3. Wstawianie wierszy do tabeli z tylko jedną kolumną IDENTITY

  4. Użyj TYPE_NAME(), aby uzyskać nazwę typu danych w SQL Server

  5. Instalowanie wystąpienia klastra pracy awaryjnej programu SQL Server — część 1