2012-06-11 101 views
10

我正在研究SQL數據庫,我有一個名爲「Price」的列。創建數據庫時,「價格」列設置爲NVARCHAR我需要將其類型更改爲decimal(18, 2)而不會丟失數據庫中的數據。這應該通過SQL腳本來完成在不丟失數據的情況下更改列類型

我想創建一個新列,將數據移動到它,刪除舊列,然後重命名新創建的列。

有人可以幫我一個例子如何做到這一點? 也有在SQL中解析字符串到小數的函數嗎?

感謝

+0

您是否已經完成了一些關於如何執行此操作的研究?你有什麼,你卡在哪裏? – Pablo

回答

14

你並不需要添加一個新列兩次,只是刪除舊的更新新一後:

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 

注意,如果old_column_name不是數字,則convert可能會失敗。

+5

缺失步驟,您將new_column_name重命名爲old_column_name,仍爲+1 –

0

您可以使用Management Studio以可視方式進行這些更改。然後,使用「生成更改腳本」按鈕來獲取您所做更改的腳本。一定要做好所有的測試在原ddbb的副本,以防出錯..

+0

注 - 如何找到:http://stackoverflow.com/questions/6247556/generate-changes-script –

2

ALTER TABLE [MyTable的]添加列NewPrice十進制(18,2)空

然後

更新[MyTable的]設置NewPrice =轉換(十進制(18,2)[參考價格])如果價格不爲空

如果上述失敗,那麼你就需要來加強它對付牛仔

一旦開心,用Alter Table刪除舊列並用sp_rename重新命名新列

相關問題