Miễn là các loại dữ liệu có phần "liên quan" - có, bạn hoàn toàn có thể làm điều này.
Bạn có thể thay đổi INT
thành BIGINT
- phạm vi giá trị của loại thứ hai lớn hơn, vì vậy bạn không có nguy cơ "mất" bất kỳ dữ liệu nào.
Bạn có thể thay đổi VARCHAR(50)
thành VARCHAR(200)
- một lần nữa, các loại tương thích, kích thước đang ngày càng lớn hơn - không có rủi ro cắt xén bất kỳ thứ gì.
Về cơ bản, bạn chỉ cần
ALTER TABLE dbo.YourTable
ALTER COLUMN YourColumn VARCHAR(200) NULL
hoặc bất cứ điều gì. Miễn là bạn không có chuỗi dài hơn 200 ký tự đó, bạn sẽ ổn thôi. Bạn không chắc chắn điều gì sẽ xảy ra nếu bạn đã có chuỗi dài hơn - hoặc chuyển đổi sẽ không thành công với lỗi hoặc nó sẽ tiếp tục và cho bạn biết rằng một số dữ liệu có thể đã bị cắt bớt. Vì vậy, tôi đề nghị đầu tiên bạn cố gắng này trên một bản sao dữ liệu của bạn :-)
Nó được một chút phức tạp hơn nếu bạn cần thay đổi một VARCHAR
một INT
hoặc một cái gì đó như thế - rõ ràng là, nếu bạn có giá trị cột đó không "phù hợp" vào loại mới, chuyển đổi sẽ không thành công. Nhưng ngay cả khi sử dụng một cột "tạm thời" riêng biệt sẽ không sửa lỗi này - bạn cần phải đối phó với những trường hợp "không tương thích" bằng cách nào đó (bỏ qua chúng, để NULL trong đó, đặt chúng thành giá trị mặc định - một cái gì đó).
Ngoài ra, việc chuyển đổi giữa VARCHAR
và NVARCHAR
có thể trở nên phức tạp nếu bạn có, ví dụ: các ký tự không phải của Tây Âu - bạn có thể mất các mục nhập nhất định khi chuyển đổi, vì chúng không thể được thể hiện ở định dạng khác hoặc chuyển đổi "mặc định" từ loại này sang loại khác không hoạt động như mong đợi.
Nguồn
2012-05-18 09:46:49
Làm việc cho 'CHAR' đến' VARCHAR' và thậm chí cắt tỉa phần đệm. –
Tôi gặp sự cố khi thay đổi từ VARCHAR sang TEXT, bất kỳ ý tưởng nào? – Murilo
@Murilo: vì 'TEXT' đã bị hủy ** và sẽ bị xóa sớm, tôi sẽ KHÔNG ** sửa đổi cột * thành * kiểu dữ liệu' TEXT' - sử dụng 'VARCHAR (MAX)' thay vào đó, nếu bạn thực sự cần nhiều hơn 8000 ký tự của dữ liệu –