最近遇到一個問題,由于之前數據庫設計時 一系列的表中 都有兩個相同字段,類型均為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很快搞定!