web-dev-qa-db-ja.com

データを失うことなく列タイプを変更する

SQLデータベースで作業していますが、「Price」という名前の列があります。データベースが作成されたとき、列「Price」はNVARCHARに設定されました。データベースのデータを失うことなく、そのタイプをdecimal(18, 2)に変更する必要があります。これはSQLスクリプトによって行われる必要があります

新しい列を作成し、そこにデータを移動し、古い列を削除してから、新しく作成した列の名前を変更することを考えました。

誰かがこれを行う方法の例を教えてくれますか?また、SQLに文字列を10進数に解析する関数はありますか?

ありがとう

20
Youssef

新しい列を2回追加する必要はありません。新しい列を更新した後、古い列を削除するだけです。

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は失敗する可能性があります。

22
aF.

何かのようなもの

Alter Table [MyTable] Add Column NewPrice decimal(18,2) null

Then

Update [MyTable] Set NewPrice = Convert(decimal(18,2),[Price]) Where Price is not null

上記が失敗した場合は、ファニーに対処するためにそれを強化する必要があります

問題がなければ、古い列を変更テーブルでドロップし、新しい列の名前をsp_renameに変更します。

4
Tony Hopkinson

これらの変更は、Management Studioを使用して視覚的に行うことができます。次に、「Generate Change Script」ボタンを使用して、行った変更のスクリプトを取得します。何か問題が発生した場合に備えて、元のddbbのコピーですべてのテストを実行してください。

0
Oscar

列のデータ型のみを変更したい場合は、次のようにすることができます=>

Alter Table YourTableName
Alter Column ColumnName DataType 

SQL Server 2012とその作業でこれをすでにテストしています。

0
Loran