2012-01-12 57 views
110

Tôi đang cố gắng cập nhật độ dài của cột VARCHAR từ 255 ký tự thành 500 mà không làm mất nội dung. Tôi đã bỏ và tạo lại các bảng trước đây nhưng tôi chưa bao giờ được tiếp xúc với câu lệnh thay đổi đó là những gì tôi tin rằng tôi cần phải sử dụng để làm điều này. Tôi tìm thấy tài liệu ở đây: ALTER TABLE (Transfact-SQL) tuy nhiên tôi không thể làm cho đầu hoặc đuôi của nó.Thay đổi độ dài tối đa của cột VARCHAR?

Tôi có sau cho đến nay (về cơ bản không có gì không may):

alter table [progennet_dev].PROGEN.LE 
alter column UR_VALUE_3 

Làm thế nào để tiếp cận này? Có tài liệu tốt hơn cho tuyên bố này ra khỏi đó (tôi đã làm một số tìm kiếm cho một tuyên bố ví dụ nhưng đã đưa ra sản phẩm nào)?

Trả lời

212

Bạn cần

ALTER TABLE YourTable ALTER COLUMN YourColumn <<new_datatype>> [NULL | NOT NULL] 

Nhưng hãy nhớ để xác định một cách rõ ràng NOT NULL nếu muốn.

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NOT NULL; 

Nếu bạn để nó không xác định như sau ...

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500); 

Sau đó, cột sẽ mặc định cho phép null ngay cả khi nó đã được ban đầu được định nghĩa là NOT NULL. nghĩa là bỏ qua đặc điểm kỹ thuật trong một ALTER TABLE ... ALTER COLUMN luôn được coi là.

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NULL; 

Hành vi này là khác nhau từ đó sử dụng cho cột mới tạo ra với ALTER TABLE (hoặc ít CREATE TABLE thời gian). Có nullability mặc định phụ thuộc vào các thiết lập ANSI_NULL_DFLT.

+0

Ông có thể giải thích mục đích của việc thêm '[NOT] NULL' ở đây ? Chỉ cần curios lý do tại sao câu trả lời của bạn đã có một Mitch không? – Codingo

+0

@MitchWheat - ["ANSI_NULL mặc định luôn bật cho ALTER COLUMN; nếu không được chỉ định, cột là nullable."] (Http://msdn.microsoft.com/en-us/library/ms190273.aspx) –

+0

Vì vậy, [ NOT NULL] chỉ định rằng các giá trị NULL -cannot- được đặt trong cột? – Codingo

16

Tăng kích thước cột với ALTER sẽ không mất bất kỳ dữ liệu:

alter table [progennet_dev].PROGEN.LE 
    alter column UR_VALUE_3 varchar(500) 

Như @ Martin chỉ ra, nhớ để xác định rõ ràng NULL | NOT NULL

Các vấn đề liên quan