码迷,mamicode.com
首页 > 数据库 > 详细

MSSQL修改表字段

时间:2015-05-02 12:25:16      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

修改表(将某列长度增加),此时原有的列不会被真正替换,而是是将新列加到该表最后,我们可以使用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。

 

MSSQL修改表字段

标签:

原文地址:http://www.cnblogs.com/Wison-Ho/p/4471657.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!