SQLデータベースで作業していますが、「Price」という名前の列があります。データベースが作成されたとき、列「Price」はNVARCHAR
に設定されました。データベースのデータを失うことなく、そのタイプをdecimal(18, 2)
に変更する必要があります。これはSQLスクリプトによって行われる必要があります
新しい列を作成し、そこにデータを移動し、古い列を削除してから、新しく作成した列の名前を変更することを考えました。
誰かがこれを行う方法の例を教えてくれますか?また、SQLに文字列を10進数に解析する関数はありますか?
ありがとう
新しい列を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
は失敗する可能性があります。
何かのようなもの
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
に変更します。
これらの変更は、Management Studioを使用して視覚的に行うことができます。次に、「Generate Change Script」ボタンを使用して、行った変更のスクリプトを取得します。何か問題が発生した場合に備えて、元のddbbのコピーですべてのテストを実行してください。
列のデータ型のみを変更したい場合は、次のようにすることができます=>
Alter Table YourTableName
Alter Column ColumnName DataType
SQL Server 2012とその作業でこれをすでにテストしています。