2011-12-29 17 views
5

Tôi đang cố gắng thay đổi trường bảng - với một số hàng trong đó - từ DateTime đến DateTime2(3).Tại sao SQL Server buộc tôi bỏ bảng để có thể thay đổi một trường từ DateTime thành DateTime2 (3)?

Nhưng SQL Server Management Studio phàn nàn rằng tôi đã thả và tạo lại bảng.

Nhưng tại sao?

Không phải là DateTime2(3) có độ chính xác cao hơn DateTime loại? Nó sẽ ổn thôi, phải không?

+1

Bạn đang sử dụng hệ thống * cơ sở dữ liệu nào? – Lion

+4

@Lion "* Management Studio *" ngụ ý SQL Server. – Yuck

+1

Xem thông tin này: http://stackoverflow.com/questions/3896713/sql-server-management-studio-adding-moving-columns-require-drop-and-re-create –

Trả lời

6

Có một cài đặt trong SSMS sẽ cho phép bạn thực hiện những gì bạn muốn .. Menu-Tools-Options-Designers-Ngăn chặn các thay đổi lưu yêu cầu xử lý lại bảng.

SSMS có thói quen tái tạo hầu hết mọi thay đổi bạn thực hiện. Nó chỉ là tốt để chỉ thay đổi kiểu dữ liệu cột với một cái gì đó như thế này.

alter table TableName alter column ColName datetime2(3) 
3

Bạn cũng có thể thực hiện việc này mà không cần xây dựng lại bảng (như Management Studio làm hậu trường).

ALTER TABLE T ALTER COLUMN D DateTime2(3) [NOT NULL] 

Điều này sẽ ít tài nguyên hướng lên phía trước nhưng để cột "cũ" ở phía sau trong trang dữ liệu sẽ có hiệu lực cho đến khi bạn tạo lại bảng.

+0

không biết rằng về thay đổi bảng thay đổi cột. Không nói rằng bạn sai, nhưng bạn có một tham chiếu? Cảm ơn! –

+1

@BenThul [Đây là một] (http://sqlblog.com/blogs/kalen_delaney/archive/2006/10/13/alter-table-will-not-reclaim-space.aspx) –

+0

những thứ tốt. Tôi đã học được điều gì đó ngày hôm nay. –

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