在SQL Server中更改列大小

Sre*_*ree 253 sql t-sql database sql-server alter-table

如何salaryemployee表中列的列大小更改numeric(18,0)numeric(22,5)

Dar*_*ren 448

ALTER TABLE [Employee]
ALTER COLUMN [Salary] NUMERIC(22,5) NOT NULL
Run Code Online (Sandbox Code Playgroud)

  • 同样重要的是,如果列具有属性"NOT NULL",则必须在查询中提及,否则默认情况下将其设置为"NULL".`ALTER TABLE [Employee] ALTER COLUMN [Salary] NUMERIC(22,5)NOT NULL` (52认同)
  • 如果您在该列上有索引,则必须删除它,然后执行alter table代码,然后再次创建索引 (5认同)
  • 如果要更改非常大的数据表中的列,请注意.你可以导致崩溃(无论如何我的环境). (4认同)

Pri*_*tel 41

alter table Employee alter column salary numeric(22,5)
Run Code Online (Sandbox Code Playgroud)


Ham*_*ian 19

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
Run Code Online (Sandbox Code Playgroud)


Dur*_*dey 18

ALTER TABLE [table_name] ALTER COLUMN [column_name] varchar(150)
Run Code Online (Sandbox Code Playgroud)


Luk*_*zda 9

有趣的方法可以在这里找到: How To Enlarge Your Column With No Downtime by spaghettidba

\n\n
\n

如果您尝试使用直接 \xe2\x80\x9cALTER TABLE\xe2\x80\x9d 命令来放大此列,必须等待 SQLServer 遍历所有行并写入新的数据类型

\n\n
ALTER TABLE tab_name ALTER COLUMN col_name new_larger_data_type;\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了克服这种不便,您的表可以使用一种神奇的列扩大药丸,它\xe2\x80\x99s称为行压缩。(...)\n 通过行压缩,固定大小的列只能使用实际数据适合的最小数据类型所需的空间。

\n
\n\n

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

\n