批量更改数据库COLLATION

时间:2022-07-26 21:45:27

      企业内部有很多系统是繁体的,由于各方面的原因,公司目前正在实行简体化,但各系统中又有数据间的交换,所以系统只能一个一个的更改,以防同时出现过多的问题。由于原先数据库只能存储繁体,而原先已存在的数据则可以不必转换为简体,照用就可以了。我们新的数据库均采用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_*_Stroke_BIN' AND TABLE_NAME=o.name and o.type='U'

 order by quotename(TABLE_NAME) 

旧系统:

批量更改数据库COLLATION

 

批量更改数据库COLLATION