使用alter table改字段类型的时候,MSSQL是先把当前字段的数据转换成新类型的数据(如果不能转换则报错)。只简单的改syscolumns是不行的

解决方案 »

  1.   

    alter table tablename alter column na char(10)
      

  2.   

    不要想改系统表来改字段类型.字段类型直接决定表中数据的存储结构. 数据类型的变化会引起现有数据的存储结构的变化. 如果你直接改系统表, 这些变化就不会发生, 那么, sql 根据系统表中定义的表结构来读取存储的数据的时候, 就会发生错乱.
      

  3.   

    "假设类型兼容,如varchar(20)->char(20)"
    楼主提出的这个就已经犯了很严重的错误.
    varchar和char对于用户来说是兼容的, 对于数据库来说, 处理方式是完全不同的.
    varchar根据实际存储的数据决定存储长度, char不管是否有数据, 都分配固定的长度, 很显然, 这两者在数据的存储方式上完全不兼容. 直接改系统表不出错才怪.
      

  4.   

    http://www.dearbook.com.cn/book/viewbook.aspx?pno=TS0029881