zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    find排除目录
    rm删除文件时排除特定文件
    聚集索引与非聚集索引
    聚集索引
    Union和Union all的区别
    delete、truncate与drop的区别
    apt-get 总结2
    apt-get 依赖修复
    apt-get 总结
    大端 小端
  • 原文地址:https://www.cnblogs.com/Wison-Ho/p/4471657.html
Copyright © 2011-2022 走看看