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.