【问题标题】:Can a CHAR(10) column be ALTER-ed to be VARCHAR or INT in SQL Server?CHAR(10) 列可以在 SQL Server 中更改为 VARCHAR 或 INT 吗?
【发布时间】:2014-05-05 23:17:44
【问题描述】:

有人在我们的数据库中创建了一个列,最初只允许使用 10 位电话号码(因此,使用了数据类型 CHAR(10))。

我们现在正在尝试更改数据库,以允许我们的系统无法处理的某些内容 - 具有可变电话号码长度的国际号码。

最初,该数据库仅处理仅通过 NANP 号码的 PBX 请求(所有国际号码在到达平台之前都被转换为终端号码)。现在会有显示预翻译编号的 Web 请求,而我们没有资源(时间/人员)来做我们想做的事,这将创建一个新表来处理前端,然后创建一个后端表中的关系。

我们的数据库被复制到另外三台服务器(一台在现场,两台在 VPN 上的异地),过去这有时会给我们带来问题(有人告诉我)。此外,所有值目前都是 10 位数字,表中有约 100,000 条记录。重申一下,我们使用的是 SQL Server(我相信是 2008 年)。

我们能否在不丢失数据的情况下使用ALTER 语句将此数据类型更改为VARCHARINT 值,其次,我们是否能够在不关闭复制的情况下执行此操作?

另外,正确的代码是以下两个 SQL 命令之一,其中列名是DNIS

ALTER DNISConfig
ALTER COLUMN [DNIS] VARCHAR(50)

ALTER DNISConfig
ALTER COLUMN [DNIS] INT

【问题讨论】:

  • 您可以轻松地在您准备的桌子上尝试更改。对于您可以在几分钟内确认的内容,这是很多文章。这其中的复制部分取决于 SQL Server 的版本和复制的类型。
  • 我没有权限在我们的服务器上创建新表,部门主管比我早 3 小时,所以我无法询问。这更快:)

标签: sql sql-server database constraints alter


【解决方案1】:

你是对的:

ALTER TABLE DNISConfig  
 ALTER COLUMN [DNIS]  VARCHAR(50) NOT NULL

将列更改为 VARCHAR。

我认为,电话号码不是 INT,因此 VARCHAR 选项会更好。

【讨论】:

  • 电话号码不是INTs,不,但电话号码的标准是最多 15 位数字(50 位很大,应该以未格式化的方式存储)。我无法判断它是否应该包含国家代码,但无论如何这应该是一个单独的列。
  • 我同意,但我可能会被指示做任何一个,所以我把这两种情况都包括在内,以防有区别。确认一下,无论哪种方式都可以保持现有数据不变?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-26
相关资源
最近更新 更多