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

Làm cách nào để bạn thêm một cột NOT NULL vào một bảng lớn trong SQL Server?

Tôi cũng gặp phải vấn đề này vì công việc của mình. Và giải pháp của tôi là # 2.

Đây là các bước của tôi (tôi đang sử dụng SQL Server 2005):

1) Thêm cột vào bảng với giá trị mặc định:

ALTER TABLE MyTable ADD MyColumn varchar(40) DEFAULT('')

2) Thêm NOT NULL ràng buộc với NOCHECK lựa chọn. NOCHECK không thực thi trên các giá trị hiện có:

ALTER TABLE MyTable WITH NOCHECK
ADD CONSTRAINT MyColumn_NOTNULL CHECK (MyColumn IS NOT NULL)

3) Cập nhật các giá trị tăng dần trong bảng:

GO
UPDATE TOP(3000) MyTable SET MyColumn = '' WHERE MyColumn IS NULL
GO 1000
  • Tuyên bố cập nhật sẽ chỉ cập nhật tối đa 3000 bản ghi. Điều này cho phép lưu một lượng lớn dữ liệu tại thời điểm đó. Tôi phải sử dụng "MyColumn IS NULL" vì bảng của tôi không có khóa chính trình tự.

  • GO 1000 sẽ thực hiện câu lệnh trước đó 1000 lần. Điều này sẽ cập nhật 3 triệu bản ghi, nếu bạn cần thêm chỉ cần tăng con số này. Nó sẽ tiếp tục thực thi cho đến khi SQL Server trả về 0 bản ghi cho câu lệnh UPDATE.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao thực thi các thủ tục được lưu trữ nhanh hơn truy vấn SQL từ một tập lệnh?

  2. Tạo chế độ xem với mệnh đề ORDER BY

  3. Chia phạm vi ngày thành một hàng mỗi tháng trong máy chủ sql

  4. Điều gì xảy ra nếu bạn không thực hiện một giao dịch với cơ sở dữ liệu (chẳng hạn như SQL Server)?

  5. Xuất bảng thành tệp có tiêu đề cột (tên cột) bằng tiện ích bcp và SQL Server 2008