zoukankan      html  css  js  c++  java
  • 手工更改数据库字符集

    手工更改数据库字符集
    在安装sql server的过程当中,经常会选错字符集,创建数据库之后,如果要更改,非常麻烦,一般多需要重装sql server,笔者尝试不重装sql,仅从数据库本身开始更改数据库层级的字符集。

    第1步更改 更改数据库的默认字符集
     
     
    alter database ETMIS_MDATA   COLLATE   Chinese_PRC_CI_AS
     
     
    第2步更改 主键字段的字符集
     
    Declare @Pk varChar( 100 );
    declare @PkField varchar( 2000 );
    declare @tbname varchar( 200 )
     
    declare   CUR_PKLIST CURSOR FOR
    select distinct   o. name ,i . name from sys . columns c ,sys . indexes i ,sys . index_columns ic ,sys . objects o
    where c . object_id= i .object_id and c .object_id = ic. object_id and c .object_id = o. object_id
    and c . collation_name= 'Chinese_PRC_BIN'
    and c . column_id= ic .column_id
    OPEN    CUR_PKLIST  
     
     
    FETCH NEXT FROM CUR_PKLIST
    INTO @tbname , @Pk
    declare @sql varchar( 8000 )
    set @sql = ''
    WHILE @@FETCH_STATUS = 0
    BEGIN
    set @PkField = ''
    select   @PkField = @PkField+ ',' +c . name from sys . columns c ,sys . indexes i ,sys . index_columns  ic ,sys . objects o
    where c . object_id= i .object_id and c .object_id = ic. object_id and c .object_id = o. object_id
    and o . name= @tbname and i. name =@Pk
    and c . column_id= ic .column_id
    set @PkField =right( @PkField, len (@PkField )- 1)  
    set @sql = @sql + ' Alter table ' + @tbname + ' Drop ' + @Pk
     
      set @sql =@sql +' go '
    SELECT    @sql = @sql + ' alter table ' +o . name + ' alter column ' + c . name + ' VARCHAR('+ convert ( varchar (10 ), c. max_length )+') COLLATE Chinese_PRC_CI_AS ' 
      from sys .columns c, sys .indexes i, sys .index_columns ic, sys .objects o
    where c . object_id= i .object_id and c .object_id = ic. object_id and c .object_id = o. object_id
    and c . collation_name= 'Chinese_PRC_BIN'
    and o . name= @tbname and i. name =@Pk
     
    set @sql = @sql + ' go '
    SELECT    @sql = @sql + '  ALTER Table ' + @tbname + ' ADD CONSTRAINT ' + @Pk +' PRIMARY KEY (' +@PkField +')'
      set @sql =@sql +' go '
    FETCH NEXT FROM CUR_PKLIST
    INTO @tbname , @Pk
      end
      close CUR_PKLIST
      deallocate CUR_PKLIST
    select @sql
     
     
     
    第3步更改 非主键字段的字符集
     
    SELECT 'alter table ' +b .name +' alter column ' + a .name +' VARCHAR('+convert( varchar(10 ),a. length)+') COLLATE Chinese_PRC_CI_AS '
     FROM SYSCOLUMNS a ,sysobjects b
     WHERE a.collation ='Chinese_PRC_BIN'
     and a.type =39
     and a.id =b. id and b. xtype='u'
  • 相关阅读:
    在eclipse中API的封装和调用
    冒泡排序
    java中阻止类的继承
    java中数组复制的两种方式
    ssh框架搭建出现的异常: class com.my.entity.user not found while looking for property: id
    ssh框架中struts.xml 的配置参数详解
    线程的五种状态
    Sql Server 分页
    window.opener 子窗体操作父窗体
    贪心算法--汽车加油问题
  • 原文地址:https://www.cnblogs.com/wanyong117/p/2801298.html
Copyright © 2011-2022 走看看