在SQL Server中更改列大小


Answers:


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

6
如果要更改非常大的数据表中的列,请小心。您可能会导致崩溃(无论如何在我的环境中)。
DavidTheDev

55
同样重要的是,如果该列具有属性,NOT NULL则必须在查询中提及该列,否则它将NULL默认设置为。 ALTER TABLE [Employee] ALTER COLUMN [Salary] NUMERIC(22,5) NOT NULL
Suvendu Shekhar Giri 2015年

8
如果在该列上有索引,则必须将其删除,然后执行alter table代码,然后再次创建索引
Sr.PEDRO



19

如果运行时ALTER COLUMN不提及属性,NOT NULL则会导致该列更改为可为空(如果尚未创建)。因此,您需要首先检查该列是否可为空,如果不是,请指定attribute NOT NULL。或者,您可以使用以下语句来预先检查列的可空性,并使用right属性运行命令。

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

6

选择表->设计->在数据类型中更改值,如下图所示。

在此处输入图片说明

保存表格设计。


正确检查可能是您缺少某些步骤。
arnav'2

7
工具->选项... />设计器->表和数据库设计器-取消选中“防止保存需要重新创建表的更改”
7anner

对于大多数事情,我更喜欢脚本。但是对于列更改,我喜欢UI。不必记住检查NOT NULL或任何计算或任何其他列属性。只需单击“保存”(在SSMS中将设置更改为@ 7anner注释后)。
雅各布·H

1

有趣的方法可以在这里找到:spaghettidba,如何在不停机的情况下扩大色谱柱

如果您尝试使用直接的“ ALTER TABLE”命令来扩大此列,则必须等待SQLServer遍历所有行并写入新的数据类型

ALTER TABLE tab_name ALTER COLUMN col_name new_larger_data_type;

为了克服这种不便,您的表格可以使用一种神奇的列增大药,称为行压缩。(...)使用行压缩时,固定大小的列只能使用适合实际数据的最小数据类型所需的空间。

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

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.