回答

收藏

更改列类型而不会丢失数据

技术问答 技术问答 360 人阅读 | 0 人回复 | 2023-09-14

我正在使用SQL数据库,我有一列名为“价格”。创建数据库后,将“价格”列设置为“NVARCHAR我”,需要将其类型更改为decimal(18,
& {1 b1 R" n1 _; g. G7 r4 A; I. F2)不丢失数据库中的数据。这应该通过SQL脚本来完成
5 _* N7 x! a3 E% P5 ]( N我想到了创建一个新列,将数据移到其中,删除旧列,然后重命名新创建的列。
  M+ `$ a, H5 |有人可以帮我举个例子吗?在SQL中也有一个函数可以将字符串解析为十进制?
. {2 a+ C7 B( ~6 Z) l& @谢谢: F) L* \" z: ]8 s/ g1 Z
               
2 ]  O( [9 Z2 n( O2 G0 @解决方案:2 C; W# j+ [' H" I- H4 X8 [6 ]
               
, L0 N) ], q- z- i2 Y
# q6 L" ~1 d& R
; A5 N) |1 d- m0 i0 w( v                您无需添加新列两次,只需在更新新列后删除旧列即可:6 {( j7 `2 F; S/ `! K; v
ALTER TABLE table_name ADD new_column_name decimal(18,2)
4 H" F- {2 X  A8 O0 S" v* M+ I& supdate table_name( W+ ~) J, b7 P% R. U( i
set new_column_name = convert(decimal(18,2), old_column_name)
, o" L. {: o* P/ FALTER TABLE table_name DROP COLUMN old_column_name: m, L& P+ o, h( ~( b: l5 p: s0 l% n
请注意,如果old_column_name不是数字值,则convert可能会失败。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则