2012-06-11 40 views
10

Tôi đang làm việc trên Cơ sở dữ liệu SQL, tôi có cột có tên là "Giá". Khi cơ sở dữ liệu được tạo, cột "Giá" được đặt thành NVARCHAR Tôi cần phải thay đổi loại của nó thành decimal(18, 2) mà không làm mất dữ liệu trong cơ sở dữ liệu. Điều này nên được thực hiện bằng một Tập lệnh SQLThay đổi loại cột mà không làm mất dữ liệu

Tôi đã nghĩ đến việc tạo cột mới, di chuyển dữ liệu đến cột đó, xóa cột cũ và sau đó đổi tên cột mới tạo.

Ai đó có thể giúp tôi với ví dụ về cách thực hiện việc này không? Cũng có một hàm trong SQL để phân tích chuỗi thành thập phân không?

Cảm ơn

+0

Bạn đã thực hiện một số nghiên cứu về cách thực hiện điều này chưa? Bạn có gì và bạn bị mắc kẹt ở đâu? – Pablo

Trả lời

14

Bạn không cần phải thêm một cột mới hai lần, chỉ cần loại bỏ cái cũ sau khi cập nhật mới:

ALTER TABLE table_name ADD new_column_name decimal(18,2) 

update table_name 
set new_column_name = convert(decimal(18,2), old_column_name) 

ALTER TABLE table_name DROP COLUMN old_column_name 

Lưu ý rằng nếu old_column_name không phải là số, convert có thể không thành công.

+5

Thiếu bước bạn đổi tên new_column_name thành old_column_name, vẫn +1 –

0

Bạn có thể thực hiện những thay đổi đó một cách trực quan bằng cách sử dụng Management Studio. Sau đó, sử dụng nút "Tạo kịch bản thay đổi" để lấy tập lệnh cho những thay đổi bạn đã thực hiện. Hãy chắc chắn để làm tất cả những thử nghiệm trong một bản sao của ddbb gốc, trong trường hợp họ gặp khó khăn ..

+0

Lưu ý - cách tìm điều đó: http://stackoverflow.com/questions/6247556/generate-changes-script –

2

Something Giống như

Alter Table [MyTable] Thêm Cột NewPrice thập phân (18,2) null

sau đó

Update [MyTable] Đặt NewPrice = Chuyển đổi (thập phân (18,2), [Giá]) trong trường hợp giá không phải là null

Nếu thất bại ở trên sau đó bạn sẽ cần tăng cường nó lên để đối phó với funnies

Sau khi bạn vui lòng thả cột cũ bằng Bảng thay đổi và đổi tên cột mới bằng sp_rename

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