如何更改 SQL Server 中列的数据类型?

Posted

技术标签:

【中文标题】如何更改 SQL Server 中列的数据类型?【英文标题】:How do you change the datatype of a column in SQL Server? 【发布时间】:2010-10-12 05:33:13 【问题描述】:

我正在尝试将列从 varchar(50) 更改为 nvarchar(200)。更改此表的 SQL 命令是什么?

【问题讨论】:

【参考方案1】:
ALTER TABLE [Performance].[dbo].[CRA_283_Violation]
ALTER COLUMN [Throughput_HS_DC_NodeB_3G_Alarm] bit

【讨论】:

【参考方案2】:

在 11g 中:

ALTER TABLE TableName
Modify ColumnName DataType;

例如: ALTER TABLE 员工 修改 BIRTH_DATE VARCHAR(30);

【讨论】:

【参考方案3】:
ALTER TABLE [dbo].[TableName]
ALTER COLUMN ColumnName VARCHAR(Max) NULL

【讨论】:

这似乎没有比几年前现有的已接受答案添加任何内容,而且您发布到表结构的更改实际上与问题不匹配。【参考方案4】:
ALTER TABLE TableName 
ALTER COLUMN ColumnName NVARCHAR(200) [NULL | NOT NULL]

编辑 如前所述,应指定 NULL/NOT NULL,另请参阅 Rob's answer。

【讨论】:

为什么要指定?有什么好处?我想,我想留下的一切我都不必提及。 @TheincredibleJan 那会很酷,但不幸的是它不能那样工作。如果您发出ALTER TABLE TableName ALTER COLUMN ColumnName 命令来更改现有列[NOT NULL],并且您没有明确指定它,那么之后它将是[NULL],因为这是默认值。 这仅在您对该列没有约束和索引的情况下才有效,否则,您需要删除所有内容并重新创建它,这是一项乏味且繁重的工作,特别是如果您有很多外国引用那一栏。例如从 tinyint 更改为 int 时。 如果您打开了 IDE(如 SSMS),请小心。即使在我正在更改的表上关闭了我的设计器选项卡(在运行脚本并右键单击表以选择“设计”之后),它仍然显示旧的数据类型!只有在 Management Studio 中关闭我的所有选项卡并再次打开设计视图后,它才最终显示更新的 DataType。非常可怕,所以要小心(它可能是一个现在已经修复的缓存错误,或者一个 MS 从不费心修复)。对于那些想知道为什么我在使用 Design-View 时运行 T-SQL 的人,我想将我的 DataTypes 更改为 SysName(SSMS 不允许这样做)。 我对 XAMPP 中的这些命令不满意。ALTER TABLE table MODIFY COLUMN column datatype 为我工作。【参考方案5】:

用于更改数据类型

alter table table_name 
alter column column_name datatype [NULL|NOT NULL]

用于更改主键

ALTER TABLE table_name  
ADD CONSTRAINT PK_MyTable PRIMARY KEY (column_name)

【讨论】:

【参考方案6】:

在 SQL Server (Transact-SQL) 中修改现有表中的列的语法是:

ALTER TABLE table_name
    ALTER COLUMN column_name column_type;

例如:

ALTER TABLE employees
    ALTER COLUMN last_name VARCHAR(75) NOT NULL;

此 SQL Server ALTER TABLE 示例会将名为 last_name 的列修改为 VARCHAR(75) 的数据类型,并强制该列不允许空值。

见here

【讨论】:

请在您的答案中添加更多信息并格式化代码/查询!【参考方案7】:

试试这个:

ALTER TABLE "table_name"
MODIFY "column_name" "New Data Type";

【讨论】:

“修改”显然是不正确的。请与其他答案进行比较。 这是旧的,但似乎 Kai Tzer 正在证明 mysql 和/或 Oracle DDL。 同意Sheldon,这里的答案对我的oracle sql没有帮助,只是这个【参考方案8】:

只要增加 varchar 的大小就可以了。根据Alter Table 参考:

降低列的精度或小数位数可能会导致数据截断。

【讨论】:

【参考方案9】:

使用 Alter table 语句。

Alter table TableName Alter Column ColumnName nvarchar(100)

【讨论】:

【参考方案10】:

不要忘记可空性。

ALTER TABLE <schemaName>.<tableName>
ALTER COLUMN <columnName> nvarchar(200) [NULL|NOT NULL]

【讨论】:

可空性是怎么回事?如果我不想更改它 - 再次设置它有什么好处? ^ 在alter table 语句执行完成后,它会默认为NULL,而没有明确定义它应该是什么。 @sc305495 确切地说,它会默认为您的 ANSI_NULL_DEFAULT 设置。

以上是关于如何更改 SQL Server 中列的数据类型?的主要内容,如果未能解决你的问题,请参考以下文章

更改增量表中列的数据类型

如何更改 BigQuery 中列的数据类型

更改 SQL 列的数据类型时更新 SSIS 包

如何列出 VIEW 中列的源表名 (SQL Server 2005)

更改列名的几种方法在数据库中

更改数据库中列的数据类型