回答

收藏

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

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

我正在使用SQL数据库,我有一列名为“价格”。创建数据库后,将“价格”列设置为“NVARCHAR我”,需要将其类型更改为decimal(18,
/ q% t5 q8 k4 B, T2)不丢失数据库中的数据。这应该通过SQL脚本来完成
9 o! I! z8 u9 K3 a! `我想到了创建一个新列,将数据移到其中,删除旧列,然后重命名新创建的列。/ v; ]& R0 ], J
有人可以帮我举个例子吗?在SQL中也有一个函数可以将字符串解析为十进制?
6 [* g/ e( U1 e  G( ?0 i谢谢
" [" _* E2 B) u" }! x               
4 |/ P3 v# m% f5 b( s4 A解决方案:
1 z) Z; N+ @% [- f" |. I               
$ M- K" N) \" e5 v& f! A5 c( d7 g% T+ X: _8 o0 h! I

$ I! u& y, X( d2 D                您无需添加新列两次,只需在更新新列后删除旧列即可:
/ w6 `1 J! c' O2 l8 Z' G# |ALTER TABLE table_name ADD new_column_name decimal(18,2); U4 B4 J8 `/ @2 A7 e+ n# \- I( y# L
update table_name
2 u, ^" T4 Y# f/ Kset new_column_name = convert(decimal(18,2), old_column_name)3 l/ [# P4 `* v. x: a+ }+ Z
ALTER TABLE table_name DROP COLUMN old_column_name; S  x. R  k- h+ V5 G
请注意,如果old_column_name不是数字值,则convert可能会失败。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则