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

Eva*_*man 1 sql-server delphi alter-table delphi-7

我需要将数据库列从整数更改为字符串/文本,但我不知道如何去做.

此列用于存储标识号,但最近ID格式已更改,现在ID也包含ASCII字符(因此,通过此更改,新ID不能存储为整数).

我正在更新的应用程序是用Delphi 7编写的,并使用odbcexpress组件作为SQL Server库.

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

你能提供一个如何做到这一点的例子吗?我对SQL Server的工作方式不是很熟悉.

谢谢!

Tim*_*ner 6

ALTER TABLE 正是你想要做的.

您的SQL可能如下所示:

ALTER TABLE dbo.MyTable ALTER COLUMN MyColumn VARCHAR(20) NOT NULL;
Run Code Online (Sandbox Code Playgroud)

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

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

与注释相关的其他信息(谢谢,全部):
alter column操作将保留数据,因为它将隐式转换为新类型.只要varchar的宽度足以容纳最大的转换值,int就会转换为varchar而没有问题.为了实现整体的安全性,我经常使用一个varchar(11)或更大的来处理最宽的int值: 20亿.

  • @EvanZimmerman:`ALTER TABLE .. ALTER COLUMN ...`将**保存**您的数据 - 只要它可以转换为新格式.从`INT`到`VARCHAR`不是问题,只要`VARCHAR`对于`INT`足够长.由于`INT`的最大值为20亿,因此它最多只有**10位 - 因此`VARCHAR(20)`足以容纳*任何*`INT`.这将**工作** - 没有问题需要解决!但**总是**首先在你的实际数据库的**副本**上测试!! 不要只是在生产中这样做! (3认同)
  • 出于好奇,我测试了如果你使文本列太短会发生什么.我原本期望SQL Server报告错误(就像使用空值"NOT NULL"的列一样).然而,我有点失望地得知它只是将值改为''*'`. (3认同)