Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách thay đổi một cột từ Null thành Not Null trong SQL Server

  • Hiểu các giới hạn của dữ liệu trong các cột KHÔNG ĐẦY ĐỦ
    • Bỏ hủy bỏ dữ liệu cột hiện có
  • Thay đổi cấu trúc dữ liệu cột
    • Xác minh khả năng vô hiệu đã thay đổi

Thay đổi cấu trúc dữ liệu của một cột trong SQL Server từ NULL thành NOT NULL , do đó không cho phép các giá trị không phải null trong cột đó, thường được thực hiện bằng cách sử dụng ALTER TABLE tương đối đơn giản cú pháp để thay đổi cột được đề cập một cách thích hợp.

Trong hướng dẫn này, chúng tôi sẽ xem xét các biện pháp phòng ngừa an toàn quan trọng cần thiết khi thay đổi hiện có dữ liệu trong một cột, trước khi thực sự phát hành bất kỳ ALTER nào các lệnh có thể gây hại cho chính bảng đó.

Hiểu Giới hạn của Dữ liệu trong các cột KHÔNG ĐẦY ĐỦ

Trước khi thực hiện bất kỳ thay đổi nào đối với bảng của bạn, điều quan trọng là phải xem qua dữ liệu nào có thể (và không thể) được chỉ định trong cột hiện có mà bạn muốn thay đổi thành NOT NULL , đảm bảo rằng không hàng nào được phép có NULL giá trị trong cột đó.

Quan trọng nhất, tất cả NULL hiện có giá trị trong cột phải được cập nhật thành giá trị không rỗng trước ALTER lệnh có thể được sử dụng thành công và cột được tạo NOT NULL . Bất kỳ nỗ lực nào để đặt cột thành NOT NULL trong khi NULL thực tế dữ liệu vẫn còn trong cột sẽ dẫn đến lỗi và không có thay đổi nào xảy ra.

Hủy bỏ việc hủy bỏ Dữ liệu Cột Hiện tại

Để đảm bảo rằng không có NULL trong cột của chúng tôi, chúng tôi sẽ sử dụng UPDATE cơ bản , áp dụng rõ ràng cho các hàng có giá trị hiện là NULL . Ví dụ:chúng tôi có một bảng cơ bản của client dữ liệu với name , emailphone . Hiện tại một số bản ghi có NULL phone giá trị mà chúng tôi không muốn cho phép:

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

Do đó, chúng tôi có thể chèn một giá trị mặc định cho tất cả phone các giá trị hiện là NULL với tuyên bố sau:

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

Bây giờ NULL của chúng tôi tất cả các giá trị đã được thay thế bằng giá trị mà chúng tôi coi là 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

Thay đổi Cấu trúc Dữ liệu Cột

Bây giờ không có NULL giá trị lâu hơn, chúng tôi có thể phát hành ALTER của chúng tôi câu lệnh cập nhật cột để tất cả các bổ sung trong tương lai không cho phép NULL các giá trị. Vì chúng tôi đang thay đổi phone trong ví dụ này, câu lệnh sẽ trông giống như sau:

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

Xác minh khả năng vô hiệu đã thay đổi

Sau khi thay đổi cột của bạn được thực hiện, bạn nên xác minh rằng cột đó không còn cho phép bất kỳ NULL nào nữa bằng cách chạy INSERT đơn giản kiểm tra và cố gắng chèn một bản ghi mới với NULL giá trị trong cột đã thay đổi:

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

Nếu tất cả diễn ra theo đúng kế hoạch, SQL Server sẽ xuất hiện lỗi thông báo rằng cột không cho phép NULL giá trị:

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. Làm cách nào để thay đổi cơ sở dữ liệu mặc định của tôi trong SQL Server mà không cần sử dụng MS SQL Server Management Studio?

  2. Cách sử dụng Sắp xếp (Thứ tự Theo) trong Câu lệnh Chọn trong SQL Server - Hướng dẫn SQL Server / TSQL Phần 109

  3. Làm thế nào để sử dụng GROUP BY để nối các chuỗi trong SQL Server?

  4. Cách sử dụng FILEPROPERTY () trong SQL Server

  5. scope_identity so với Id_current