Thay đổi chiều rộng cột


39

Sẽ tăng chiều rộng cột (nvarchar) nhất thiết phải thả bảng?

Nói cách khác, chiều rộng có thể được thay đổi trong môi trường sản xuất với người dùng hoạt động không?

Tôi hình dung rằng nếu kích thước đang tăng (trái ngược với giảm) thì đây sẽ không phải là vấn đề.

Câu trả lời:


52

Nếu bạn đang thực hiện nó thông qua một câu lệnh T-SQL như bên dưới, thì sẽ không xảy ra hiện tượng sụt bảng nào và bạn có thể thực hiện nó một cách an toàn trong môi trường sản xuất:

alter table <table> alter column <column> nvarchar(biggernumber) [not] null

Nếu bạn thực hiện thông qua GUI bảng thiết kế SSMS, nó sẽ phụ thuộc vào tập lệnh nào nó quyết định sử dụng để thực hiện thay đổi. Đôi khi, nó sẽ chèn dữ liệu vào một bảng tạm thời, thả bảng gốc, tạo một phiên bản mới của bảng đó và chèn lại vào bảng mới. Một cách dễ dàng để tìm hiểu những gì nó sẽ làm là nhấp vào nút "Tạo tập lệnh" và xem T-SQL mà nó dự định thực hiện.


1
Tôi đã nghĩ ngay cả nút "Tạo tập lệnh" sẽ đưa ra cảnh báo rằng bạn sắp bỏ bảng trước khi hiển thị cho bạn tập lệnh.
Nick Chammas

1
Nó không đưa ra lỗi, nhưng nó không thực sự chạy tập lệnh cho đến khi bạn nhấp vào OK (hoặc chạy hoặc bất cứ điều gì) trên cửa sổ với tập lệnh. Bạn có thể sao chép tập lệnh và hủy cửa sổ hiển thị tập lệnh.
mrdenny

nhưng nó có hoạt động khi nói thay đổi từ float sang Decimal (n, n) không?
Nishanth Shaan

Điều này có ảnh hưởng gì nếu bảng được nhân rộng? Tôi giả sử các bảng thuê bao sẽ không tự động cập nhật?
tmwoods

18

Việc tăng chiều rộng cột của nvarcharcột sẽ không yêu cầu thả bảng. Không có bất kỳ ALTER TABLEhoạt động. Để biết chi tiết về các hạn chế khi thay đổi thuộc tính bảng hoặc cột, bạn có thể đọc lên câu lệnh ALTER TABLE .

Tôi đã sao chép các phần có liên quan nhất từ ​​tài liệu dưới đây:

Thay đổi kích thước của cột

Bạn có thể thay đổi độ dài, độ chính xác hoặc tỷ lệ của cột bằng cách chỉ định kích thước mới cho kiểu dữ liệu cột trong mệnh đề ALTER COLUMN. Nếu dữ liệu tồn tại trong cột, kích thước mới không thể nhỏ hơn kích thước tối đa của dữ liệu. Ngoài ra, cột không thể được xác định trong một chỉ mục, trừ khi cột là kiểu dữ liệu varchar, nvarchar hoặc varbinary và chỉ mục không phải là kết quả của ràng buộc KEY PRIMARY KEY. Xem ví dụ P.

Khóa và ALTER BẢNG

Những thay đổi được chỉ định trong ALTER TABLE được triển khai ngay lập tức. Nếu các thay đổi yêu cầu sửa đổi các hàng trong bảng, ALTER TABLE cập nhật các hàng. ALTER TABLE có được khóa sửa đổi lược đồ trên bảng để đảm bảo rằng không có kết nối nào khác tham chiếu ngay cả siêu dữ liệu cho bảng trong khi thay đổi, ngoại trừ các hoạt động chỉ mục trực tuyến yêu cầu khóa SCH-M rất ngắn ở cuối. Trong thao tác ALTER TABLE gay SWITCH, khóa được lấy trên cả bảng nguồn và bảng đích. Các sửa đổi được thực hiện cho bảng được ghi lại và có thể phục hồi hoàn toàn. Các thay đổi ảnh hưởng đến tất cả các hàng trong các bảng rất lớn, chẳng hạn như thả một cột hoặc thêm cột KHÔNG NULL với mặc định, có thể mất nhiều thời gian để hoàn thành và tạo nhiều bản ghi nhật ký. Các câu lệnh ALTER TABLE này phải được thực thi với cùng một cách chăm sóc như bất kỳ INSERT, UPDATE,


Cũng là câu trả lời tuyệt vời. Nhưng tôi chỉ có thể chọn một. Cảm ơn!
Fernando
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.