SQLServer如何快速修改数据库中含有的某个字段的类型

最近遇到一个问题,由于之前数据库设计时 一系列的表中 都有两个相同字段,类型均为varchar,长度50字节,可是现在发现用户录入的数据超过了50字节,多余的数据库自动截断了。由于数据库庞大,涉及多个不同的库和表,如何解决呢?一个一个找,然后一个一个改?

一开始我确实是这么做的,可是工作量太大了,这时我想到了一个捷径:能不能把含有这些字段的表先找出来呢?

答案是肯定的,通过如下语句即可把含有对应字段的表先找出来:

SELECT  b.name  as  TableName,a.name  as  columnname,a.usertype as type  From  syscolumns    a  INNER  JOIN    sysobjects  b 
  ON  a.id=b.id    AND  b.type=’U’
 AND  a.name=’colorno’

其中的type=‘U’表示我们要查询的是 表(非视图,非存储过程),name=‘colorno’表示我们要找字段名是‘colorno’的列。

通过以上语句我们就可以快速找到含有对应字段的表了。

当然为了安全期间,我们部分表可能也含有这个字段,但类型可能不是varchar的(也就是别有用意,比如是 int 或者 bit),所以再修改表之前我们需要再核对一下。通过如下语句可以查询某个表的某个字段是什么类型,长度是多少。

 select column_name,data_type,CHARACTER_MAXIMUM_LENGTH from information_schema.columns
 where table_name =’tb_Test’ and COLUMN_NAME=’colorno’

这样我们就可以把字段的 类型和长度查询出来。

如果是varchar类型,我们就执行alter吧,语句如下:

alter table  tb_Test  alter column colorno varchar(100)

有了以上代码基础,写个程序,循环(for),判断(if),执行(ExecuteSql),ok很快搞定!

    原文作者:若书ruoshu
    原文地址: https://www.jianshu.com/p/7d2e409df0ae
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞