我需要将数据库列从整数更改为字符串/文本,但我不知道如何去做。
此列用于存储标识号,但最近ID格式已更改,现在ID也包含ASCII字符(因此,通过此更改,新ID不能存储为整数)。
我正在更新的应用程序是用Delphi 7编写的,并使用odbcexpress组件作为SQL Server库。
是否可以使用ALTER TABLE
?或者是否需要将数据作为字符串复制到新列,删除旧列,并将列重命名为旧名称?
你能提供一个如何做到这一点的例子吗?我对SQL Server的工作方式不是很熟悉。
谢谢!
答案 0 :(得分:6)
ALTER TABLE
正是您想要做的。
您的SQL可能如下所示:
ALTER TABLE dbo.MyTable ALTER COLUMN MyColumn VARCHAR(20) NOT NULL;
请注意,如果您有引用此列的列,则还必须更新这些列,通常是暂时删除外键约束,进行更改,然后重新创建外键约束。
不要忘记更改依赖或下游的任何内容,例如存储过程中的任何变量或Delphi代码。
与评论相关的其他信息(谢谢,全部):
此alter column
操作将保留数据,因为它将隐式转换为新类型。只要varchar的宽度足以容纳最大的转换值,int就会转换为varchar而没有问题。为了保证整体的安全性,我经常使用varchar(11)
或更大的值来处理最宽的int值:负 20亿。