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     [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

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   [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

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', '[email protected]', 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