最近遇到一个问题,由于之前数据库设计时 一系列的表中 都有两个相同字段,类型均为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很快搞定!