MS SQL 2000数据库
排序规则 Latin1_General_BIN
结果中文成乱码搜资料,修改排序规则
   ALTER   DATABASE   mmm   COLLATE   Chinese_Taiwan_Stroke_BIN
报错数据库不能修改的,也不插入数据,只读数据做报表
问一下怎样将Latin1编码转换成UTF-8开发环境 VS 2005

解决方案 »

  1.   

    问题:怎么样修改数据库的排序规则?   
      是这样写:   
            alter   database   数据库名   collate   Chinese_PRC_CS_AS   ?   
      为什么报错呢?报错如下:   
            未能排它地锁定数据库以执行该操作。   
            ALTER   DATABASE   失败。无法将数据库   ''   的默认排序规则设置为   'Chinese_PRC_CI_AS'。   
        
      还有更改数据库的排序规则会不会对数据库中的数据信息造成影响。    use   master   
      go   
        
      alter   database   数据库名   collate   Chinese_PRC_CS_AS --如果上述方法无效,改用:   
        
      /*   
      断开所有用户打开的连接   
      */   
      use   master   
      go   
        
      if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_killspid]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)   
      drop   procedure   [dbo].[p_killspid]   
      GO   
        
      create   proc   p_killspid   
      @dbname   varchar(200) --要关闭进程的数据库名   
      as       
      declare   @sql     nvarchar(500)       
      declare   @spid   nvarchar(20)   
        
      declare   #tb   cursor   for   
      select   spid=cast(spid   as   varchar(20))   from   master..sysprocesses   where   dbid=db_id(@dbname)   
      open   #tb   
      fetch   next   from   #tb   into   @spid   
      while   @@fetch_status=0   
      begin       
      exec('kill   '+@spid)   
      fetch   next   from   #tb   into   @spid   
      end       
      close   #tb   
      deallocate   #tb   
      go   
        
      --用法       
      exec   p_killspid     '数据库名'   
      go   
        
      alter   database   数据库名   collate   Chinese_PRC_CS_AS    数据库的排序规则是改过来了,   但是数据库中所有表中字符类型的排序规则又由开始的<database   default>变成了Compatibility_198_804_30001,这该怎么改呢? --用这个,不过,主键字段不能修改   
        
      declare   tb   cursor   for   
      SELECT   sql='alter   table   ['+d.name   
      +']   alter   column   ['+a.name+']   '+b.name   
      +   '('+cast(a.length*2   as   varchar)+')'   
      +'   collate   Chinese_PRC_CS_AS'   
      FROM   syscolumns   a   
      left   join   systypes   b   on   a.xtype=b.xusertype   
      inner   join   sysobjects   d   on   a.id=d.id     and   d.xtype='U'   and     d.name<>'dtproperties'   
      where     
      b.name   like   '%char'   
      and     
      not   exists(SELECT   1   FROM   sysobjects   where   xtype='PK'   and   name   in   (   
      SELECT   name   FROM   sysindexes   WHERE   indid   in(   
      SELECT   indid   FROM   sysindexkeys   WHERE   id   =   a.id   AND   colid=a.colid   
      ))) --主键不能修改   
      order   by   d.name,a.name   
        
      declare   @sql   varchar(1000)   
      open   tb   
      fetch   next   from   tb   into   @sql   
      while   @@fetch_status   =   0   
      begin   
      exec(@sql)   
      fetch   next   from   tb   into   @sql   
      end   
      close   tb   
      deallocate   tb   
    或者试试导入导出     
      sql200企业管理器   
      --右键要你的数据库   
      --所有任务   
      --导出数据   
      --目标数据库,数据库选择<新建>,新建一个空库(或者事先建好库,特别注意排序规则)   
      --然后选择"在两个SQL数据库之间复制数据和对象"   
      --将"使用排序规则"的选择取消,其他根据你的需要选择   
      --最后完成.   本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wyx714/archive/2009/01/06/3720660.aspx
      

  2.   

    数据库不能修改,怕修改了会对公司ERP有影响新建一个空数据库,再将原数据库的数据导入进去
    这个我也知道,但四十几个数据库,而且又是动态的,这个不方便维护
      

  3.   

    不知道还有 SQL 版块,那边才火
      

  4.   

    SQL版块也发了一帖,呵呵
    实在没办法只好复制数据库修改排序规则这个笨方法了
      

  5.   

    保存时代码怎么写的,似乎可以不用改数据库设置,只需要把表的字段设置为varchar类型
      

  6.   

    上面写错了,表字段是nvarchar