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


Answers:


563
ALTER TABLE TableName 
ALTER COLUMN ColumnName NVARCHAR(200) [NULL | NOT NULL]

编辑 如前所述,应该指定NULL / NOT NULL,也请参见Rob的回答


1
为什么要指定?有什么好处?我想不必说的是我想离开的所有内容。
令人难以置信的

5
@TheincredibleJan太酷了,但是不幸的是,这种方式不起作用。如果发出ALTER TABLE TableName ALTER COLUMN ColumnName命令以更改现有列为,[NOT NULL]而未显式指定它,则它将在此[NULL]之后,因为这是默认设置。
takrl

4
仅当您在该列上没有约束和索引时,此方法才有效,否则,您需要删除所有内容并重新创建它,这是繁琐而繁琐的工作,尤其是当该列上有许多外部引用时。例如,当从tinyint更改为int时。
Hrvoje Batrnek

如果您打开了IDE,请当心(例如SSMS)。即使在我正在更改的表上关闭了Designer选项卡的情况下(运行脚本并右键单击表以选择“设计”后),它仍然显示旧的数据类型!直到关闭Management Studio中的所有选项卡并再次打开设计视图之后,它才最终显示更新的DataType。非常可怕,因此要小心(它可能是一个已修复的缓存错误,或者一个MS从未修复过)。对于那些想知道为什么在使用Design-View时为什么运行T-SQL的人,我想将DataTypes更改为SysName(SSMS不允许)。
MikeTeeVee

我对XAMPP中的这些命令不走运。ALTER TABLE table MODIFY COLUMN column datatype为我工作。
Pavindu

173

不要忘记可空性。

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

2
可空性是怎么回事?如果我不想更改它-重新设置它有什么好处?
令人难以置信的

7
^在alter table语句完成执行而未明确定义其内容之后,它将默认为NULL。
sc305495

1
@ sc305495确切地说,它将默认使用ANSI_NULL_DEFAULT设置。
Zikato

23

使用Alter表语句。

Alter table TableName Alter Column ColumnName nvarchar(100)

13

修改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)并强制该列不允许使用空值。

这里


1
请在您的答案中添加更多信息,并设置代码/查询的格式!
塞巴斯蒂安·布罗斯

4

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

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




-11

尝试这个:

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

1
“修改”显然是不正确的。请与其他答案进行比较。
弗兰克(Frank)

3
这很旧,但似乎Kai Tzer正在证明MySql和/或Oracle DDL。
谢尔顿·科恩

1
同意谢尔顿,这里的答案并没有帮助我使用oracle sql,仅此
而已
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.