回答

收藏

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

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

我正在使用SQL数据库,我有一列名为“价格”。创建数据库后,将“价格”列设置为“NVARCHAR我”,需要将其类型更改为decimal(18,
9 J' k7 T* W/ A2 c8 T. @2)不丢失数据库中的数据。这应该通过SQL脚本来完成0 t0 n0 L; t- c' M
我想到了创建一个新列,将数据移到其中,删除旧列,然后重命名新创建的列。- f4 k3 Q3 M& `& s  S: V7 Q5 E
有人可以帮我举个例子吗?在SQL中也有一个函数可以将字符串解析为十进制?
# Q9 X9 Z2 e( {3 w( L谢谢
  Q6 J% I3 L" l' |% ~" j- p                ) n9 b5 ^* ?! r8 h7 O$ ?$ r) n! a
解决方案:; N/ ]; R, V' ~
               
1 S% g8 A* q, U" {3 I& N! C9 _9 Z) m3 O2 Z$ e# X

3 |* E/ g& ^! ~, o; n8 v: ]7 Q, ~$ u                您无需添加新列两次,只需在更新新列后删除旧列即可:
  X/ H3 u) z" C% x6 ]ALTER TABLE table_name ADD new_column_name decimal(18,2)2 b- l# P1 C" h3 K% q
update table_name5 t  a3 Q$ p. N( }) D0 ^! P* J
set new_column_name = convert(decimal(18,2), old_column_name)
  v$ J( m; {% W$ }) gALTER TABLE table_name DROP COLUMN old_column_name( M6 e! d/ v7 g) y! a/ x
请注意,如果old_column_name不是数字值,则convert可能会失败。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则