如何在 SQL 服务器中将列的数据类型从整数更改为文本?

How can I change the datatype of a column from integer to text in SQL Server?

我需要将数据库列从整数更改为 string/text,但我不确定该怎么做。

此列用于存储标识号,但最近 ID 格式发生了变化,现在 ID 也包含 ASCII 字符(因此随着这一变化,新 ID 无法存储为整数)。

我正在更新的应用程序是用 Delphi 7 编写的,并使用 SQL 服务器库的 odbcexpress 组件。

是否可以为此使用 ALTER TABLE?或者是否需要将数据作为字符串复制到新列,删除旧列,并将列重命名为旧名称?

你能举例说明我如何做到这一点吗?我对SQL服务器的工作原理不是很熟悉。

谢谢!

ALTER TABLE正是您想要做的。

您的 SQL 可能看起来像这样:

ALTER TABLE dbo.MyTable ALTER COLUMN MyColumn VARCHAR(20) NOT NULL;

请注意,如果您有引用这一列的列,您也必须更新这些列,通常是暂时删除外键约束,进行更改,然后重新创建外键约束。

不要忘记更改依赖或下游的任何内容,例如存储过程中的任何变量或您的 Delphi 代码。

与评论相关的其他信息(谢谢大家):
alter column 操作将保留数据,因为它将隐式转换为新类型。只要您的 varchar 足够宽以至少容纳最大的转换值,int 就可以毫无问题地转换为 varchar。为了使用 int 的整体安全性,我经常使用 varchar(11) 或更大的值来处理最宽的 int 值:negative two billion.

ALTER TABLE your_table MODIFY your_column_name varchar(255) null;