Làm thế nào để bạn thay đổi kiểu dữ liệu của một cột trong SQL Server?


Câu trả lời:


563
ALTER TABLE TableName 
ALTER COLUMN ColumnName NVARCHAR(200) [NULL | NOT NULL]

EDIT Như đã lưu ý NULL / KHÔNG NULL nên được chỉ định, xem câu trả lời của Rob .


1
Tại sao nó phải được chỉ định? Lợi ích là gì? Tất cả mọi thứ tôi muốn để lại vì tôi không phải đề cập đến, tôi nghĩ vậy.
Ngày

5
@TheincredibleJan Điều đó thật tuyệt, nhưng thật không may, nó không hoạt động theo cách đó. Nếu bạn đưa ra một ALTER TABLE TableName ALTER COLUMN ColumnNamelệnh để thay đổi một cột hiện có [NOT NULL]và bạn không chỉ định rõ ràng nó, thì nó sẽ là [NULL]sau đó, vì đó là mặc định.
takrl

4
Điều này chỉ hoạt động nếu bạn không có các ràng buộc và chỉ mục trên cột đó, nếu không, bạn cần bỏ mọi thứ và tạo lại nó, công việc tẻ nhạt và khó chịu, đặc biệt là nếu bạn có nhiều tài liệu tham khảo nước ngoài trên cột đó. ví dụ như khi thay đổi từ tinyint sang int.
Hrvoje Batrnek

Cẩn thận nếu bạn có một IDE mở (như SSMS). Ngay cả khi Tab thiết kế của tôi đóng trên Bảng tôi đã thay đổi (sau khi chạy tập lệnh và nhấp chuột phải vào Bảng để chọn "Thiết kế"), nó vẫn hiển thị Kiểu dữ liệu cũ! Chỉ sau khi đóng TẤT CẢ các Tab của tôi trong Management Studio và mở lại Dạng xem thiết kế thì cuối cùng nó cũng hiển thị DataType được cập nhật. Rất đáng sợ, vì vậy hãy cẩn thận (có thể là lỗi bộ nhớ cache đã được sửa chữa ngay bây giờ hoặc một MS không bao giờ sửa lỗi). Đối với những người thắc mắc tại sao tôi chạy T-SQL khi tôi sử dụng Design-View, tôi muốn thay đổi DataTypes của mình thành SysName(SSMS không cho phép).
MikeTeeVee

Tôi không có may mắn với các lệnh này trong XAMPP. ALTER TABLE table MODIFY COLUMN column datatypeđã làm cho tôi.
Pavindu

173

Đừng quên sự vô hiệu.

ALTER TABLE <schemaName>.<tableName>
ALTER COLUMN <columnName> nvarchar(200) [NULL|NOT NULL]

2
Vấn đề với nullable là gì? Nếu tôi không muốn thay đổi nó - lợi ích của việc thiết lập lại là gì?
Ngày

7
^ Nó sẽ mặc định là NULL sau khi câu lệnh thay đổi kết thúc thực thi mà không xác định rõ ràng nó nên là gì.
sc305495

1
@ sc305495 ​​Chính xác, nó sẽ mặc định cho bất kỳ cài đặt ANSI_NULL_DEFAULT nào của bạn.
Zikato

23

Sử dụng câu lệnh bảng Alter.

Alter table TableName Alter Column ColumnName nvarchar(100)

13

Cú pháp sửa đổi một cột trong bảng hiện có trong SQL Server (Transact-SQL) là:

ALTER TABLE table_name
    ALTER COLUMN column_name column_type;

Ví dụ:

ALTER TABLE employees
    ALTER COLUMN last_name VARCHAR(75) NOT NULL;

ALTER TABLEVí dụ SQL Server này sẽ sửa đổi cột được gọi làlast_name kiểu dữ liệu VARCHAR(75)và buộc cột không cho phép giá trị null.

xem ở đây


1
vui lòng thêm thông tin vào câu trả lời của bạn và định dạng mã / truy vấn!
Sebastian Brosch

4

Miễn là bạn tăng kích thước của varchar của bạn, bạn sẽ ổn. Theo tham chiếu Bảng thay đổi :

Giảm độ chính xác hoặc tỷ lệ của một cột có thể gây ra việc cắt dữ liệu.


3

Để thay đổi kiểu dữ liệu

alter table table_name 
alter column column_name datatype [NULL|NOT NULL]

Để thay đổi khóa chính

ALTER TABLE table_name  
ADD CONSTRAINT PK_MyTable PRIMARY KEY (column_name)

1
ALTER TABLE [dbo].[TableName]
ALTER COLUMN ColumnName VARCHAR(Max) NULL

Điều này dường như không thêm bất cứ điều gì vào câu trả lời được chấp nhận hiện có từ nhiều năm trước và cả những thay đổi bạn đã đăng lên cấu trúc bảng không thực sự khớp với câu hỏi.
PeterJ

-11

Thử cái này:

ALTER TABLE "table_name"
MODIFY "column_name" "New Data Type";

1
"Sửa đổi" rõ ràng là không chính xác. Hãy so sánh với các câu trả lời khác.
Frank

3
Điều này đã cũ, nhưng dường như Kai Tzer đã chứng minh MySql và / hoặc Oracle DDLs.
Sheldon Cohen

1
Đồng ý với Sheldon, các câu trả lời ở đây không giúp tôi với
orc
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.