MSSQL修改表字段

修改表(将某列长度增加),此时原有的列不会被真正替换,而是是将新列加到该表最后,我们可以使用DBCC PAGE查看原有的数据仍然在那里。

示例:

use tempdb
go
create table a(col1 smallint,
			   col2 char(2000),
			   col3 char(1000)
			  )

此时在表a上修改列col2为char(3000)

alter table a 
alter column col2 char(3000)

在我们理解中,该表目前单行数据长度4002再加内部使用的一点长度。此时即使再加一个3000长度的列,也不会报错。

alter table a 
add col4 char(3000)

但实际是:

Msg 1701, Level 16, State 1, Line 1
Creating or altering table 'a' failed because the minimum row size would be 9009, including 7 bytes of internal overhead. This exceeds the maximum allowable table row size of 8060 bytes.

此时,可以有以下方法来修复:

1.

 alter table a rebuild

2.

create clustered index ix_a 
on a(col1)

3.

使用最新脚本创建a_bak,将数据全部导入到a_bak之后,删除a表,再将a_bak表重命名为a。

 

转载于:https://www.cnblogs.com/Wison-Ho/p/4471657.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值