将INT转换为VARCHAR

9

大家好,

我有一个已经填充数据的表格,其中一列名为 'SSN',数据类型为INT。请问是否可以将该列 'SSN' 及其中的数据转换为VARCHAR(#)格式。

ALTER TABLE Table1
 MODIFY SSN varchar(9);

那会有效吗?

谢谢!

非常感谢您的帮助!

3个回答

25
alter table Table1
  alter column SSN varchar(9);

您可以进行快速测试以验证这将保留数据。

create table #data(
  ssl int
)

insert into #data values(1)
insert into #data values(2)
insert into #data values(3)
insert into #data values(4)

select * from #data

alter table #data
  alter column ssl varchar(9)

select * from #data

在执行此类操作之前,备份永远不会有坏处。即使只是快速地插入到另一个表中,如果数据量不是很大也可以。


这会将列中的数据转换为varchar并保留数据吗? - evglynn
我建议在此之后重建您的聚集索引(或堆表),因为您的数据页将会非常碎片化。 - JNK
1
@evglynn:在测试数据库上尝试一下,你会在几秒内得到答案,而不必等待回复。 - Styxxy
是的,它会保留数据。不过最好先备份一下。 - Dave Carlile
通常在将代码应用于生产环境之前,最好先在测试数据库上进行测试。这些测试非常容易在自己的计算机上完成,而不必在线上询问(如果出现问题,则可以使用搜索引擎或提出问题)。 - Styxxy
显示剩余3条评论

2

对于那些需要MySQL语法而不是ANSI SQL语法的人,可以尝试类似以下的内容:

ALTER TABLE Table1 MODIFY SSN varchar(9)

-4

如果已经存在数据,则不允许更改列类型。您可以备份数据,然后在修改后重新填充表。


不是真的我们可以使用 Alter table test Alter column id varchar(10) 而不会出现任何问题。 - Amirhossein
实际上,你的回答并不正确。 - amdev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接