在SQL Server中修改列大小

380

如何将employee表中的salary列从numeric(18,0)更改为numeric(22,5)

10个回答

685
ALTER TABLE [Employee]
ALTER COLUMN [Salary] NUMERIC(22,5) NOT NULL

8
注意,如果你在一个非常大的数据表中修改列,可能会导致崩溃(至少在我的环境中是这样)。 - DavidTheDev
70
如果列使用了NOT NULL属性,那么在查询中必须明确指出,否则默认会将其设置为NULL。翻译的SQL语句为: ALTER TABLE [Employee] ALTER COLUMN [Salary] NUMERIC(22,5) NOT NULL - Suvendu Shekhar Giri
12
如果您在该列上有索引,您需要先删除它,然后执行修改表格的代码,最后再重新创建索引。 - Sr.PEDRO

53
ALTER TABLE [table_name] ALTER COLUMN [column_name] varchar(150)

47
alter table Employee alter column salary numeric(22,5)

26

如果在运行 ALTER COLUMN 时没有提及属性 NOT NULL ,则会导致该列变为可空列(如果它尚未为空)。因此,您需要首先检查列是否可为空,如果不是,则指定属性 NOT NULL 。或者,您可以使用以下语句,在运行带有正确属性的命令之前检查列的可空性。

IF COLUMNPROPERTY(OBJECT_ID('Employee', 'U'), 'Salary', 'AllowsNull')=0
    ALTER TABLE [Employee]
        ALTER COLUMN [Salary] NUMERIC(22,5) NOT NULL
ELSE        
    ALTER TABLE [Employee]
        ALTER COLUMN [Salary] NUMERIC(22,5) NULL

9

这里可以找到有趣的方法:如何在不停机的情况下扩大列(How To Enlarge Your Columns With No Downtime),作者为spaghettidba。

If you try to enlarge this column with a straight “ALTER TABLE” command, you will have to wait for SQLServer to go through all the rows and write the new data type

ALTER TABLE tab_name ALTER COLUMN col_name new_larger_data_type;

To overcome this inconvenience, there is a magic column enlargement pill that your table can take, and it’s called Row Compression. (...) With Row Compression, your fixed size columns can use only the space needed by the smallest data type where the actual data fits.

当表在ROW级别上被压缩时,ALTER TABLE ALTER COLUMN是仅元数据操作。


4
右键单击要修改的表格 --> 选择 "设计" --> 根据以下图像更改 "数据类型" 列中的值:

screenshot of the Data Type column with a column's data type value getting changed

然后保存以完成对表格设计的更改。
对于小型表格,使用GUI方法。如果您正在更改大型表格,则仅使用命令并同时检查是否发生阻塞,直到命令完成。

请仔细检查,可能您错过了某些步骤。 - Vishe
10
工具 -> 选项... / >设计师 -> 表格和数据库设计师 -- 取消勾选 "防止保存需要重新创建表格的更改" - 7anner
1
对于大多数事情,我更喜欢脚本编写。但是对于列更改,我喜欢使用用户界面。不必记住检查NOT NULL或任何计算或任何其他列属性。只需单击保存(在SSMS中进行设置更改后,如@7anner所述)。 - Jacob H
1
这不是正确的解决方案,使用设计更改表数据类型将导致删除和重新创建表,您需要使用alterALTER TABLE [Employee] ALTER COLUMN [Salary] NUMERIC(22,5) NOT NULL - Arunkumar Arjunan

2
你可以使用ALTER命令来修改表结构。
修改列大小的语法如下:
ALTER table table_name modify COLUMN column_name varchar (size);

0

修改表 "Employee" 中字段 "Salary" 的数据类型为 NUMERIC(22,5)。


0

针对Oracle数据库:

ALTER TABLE table_name MODIFY column_name VARCHAR2(255 CHAR);


Dinesh 正在要求更改数字数据类型而不是字符串类型。 - Meyssam Toluie
以上只是他提供的示例,其他开发人员需要自己思考。@MeyssamToluie - ShivShankar Namdev

-1
在这种情况下,您需要使用ALTER TABLE语句来增加列大小。
以下是其语法:
ALTER TABLE 表名 MODIFY 列名 varchar(新长度);

Dinesh 正在要求更改数字数据类型而不是字符串类型。 - Meyssam Toluie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接