如何更改 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 中列的数据类型?的主要内容,如果未能解决你的问题,请参考以下文章