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

#1 楼

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


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

评论


为什么要指定?有什么好处?我想不必说的是我想离开的所有内容。

–令人难以置信的扬
17 Mar 10 '17 at 7:48

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

– takrl
17年4月19日在6:10



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

–Hrvoje Batrnek
18年6月9日在14:18



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

–MikeTeeVee
19年4月10日在2:37

我对XAMPP.ALTER TABLE表MODIFY COLUMN列数据类型的这些命令不满意。

– Pavindu
19年5月6日在14:28

#2 楼

不要忘记可空性。

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


评论


可空性是怎么回事?如果我不想更改它-重新设置它有什么好处?

–令人难以置信的扬
17 Mar 10 '17 at 7:50



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

–sc305495
17年7月31日在20:29

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

– Zikato
19年4月15日在12:17

#3 楼

使用Alter table语句。

Alter table TableName Alter Column ColumnName nvarchar(100)


#4 楼

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

请参见此处

评论


请在您的答案中添加更多信息,并设置代码/查询的格式!

– Sebastian Brosch
2015年10月11日在21:22

#5 楼

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


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


#6 楼

用于更改数据类型

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


用于更改主键

ALTER TABLE table_name  
ADD CONSTRAINT PK_MyTable PRIMARY KEY (column_name)


#7 楼

ALTER TABLE [dbo].[TableName]
ALTER COLUMN ColumnName VARCHAR(Max) NULL


评论


这似乎并没有在多年前的现有接受答案上添加任何内容,而且您在表结构中发布的更改实际上与该问题不匹配。

– PeterJ
20 Mar 5 '20 at 11:05

#8 楼

试试这个:

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


评论


“修改”显然是不正确的。请与其他答案进行比较。

–坦率
15年1月29日在17:01

这很旧,但似乎Kai Tzer正在证明MySql和/或Oracle DDL。

–谢尔顿·科恩(Sheldon Cohen)
18年7月7日在19:55

同意Sheldon,这里的答案并不能帮助我使用oracle sql,仅此而已

– AsfK
18年4月12日在9:44