首页 > 代码库 > 批量更改数据库COLLATION

批量更改数据库COLLATION

      企业内部有很多系统是繁体的,由于各方面的原因,公司目前正在实行简体化,但各系统中又有数据间的交换,所以系统只能一个一个的更改,以防同时出现过多的问题。由于原先数据库只能存储繁体,而原先已存在的数据则可以不必转换为简体,照用就可以了。我们新的数据库均采用Chinese_PRC_BIN collation, 所以我们直接把旧系统备份一份,然后恢复到新的服务器上,同时更改数据库的collation. 但是只更改了数据库的COLLATION还是不够的。要把数据库里面的表都同时更改了才可以。但我们的数据库有100多张表,而且后续的其它系统远比现在这个系统复杂的多。表的数量也大很多。所以我们需要找到一个方案可以批量更改的。经过一翻努力及测试,终于找到了解决的方法,特意写下来,看有没有相同需求的朋友。首先产生代码。再把得到的结果放到SQL查询器执行便可。

select ALTER TABLE  + quotename(TABLE_NAME) +  

        ALTER COLUMN  + quotename(COLUMN_NAME) +   + quotename(DATA_TYPE) +  

CASE WHEN CHARACTER_MAXIMUM_LENGTH = -1 then (max) 

 WHEN DATA_TYPE in (text,ntext) then ‘‘ 

 WHEN CHARACTER_MAXIMUM_LENGTH IS NOT NULL  

    THEN (+(CONVERT(VARCHAR,CHARACTER_MAXIMUM_LENGTH)+) )  

      ELSE isnull(CONVERT(VARCHAR,CHARACTER_MAXIMUM_LENGTH), ) END  

      + COLLATE Chinese_PRC_BIN  + CASE IS_NULLABLE  

                WHEN YES THEN NULL 

                WHEN NO THEN NOT NULL 

                END 

  from  INFORMATION_SCHEMA.COLUMNS,sys.all_objects o  

 where COLLATION_NAME=Chinese_Taiwan_Stroke_BIN AND TABLE_NAME=o.name and o.type=U

 order by quotename(TABLE_NAME) 

旧系统: