zoukankan      html  css  js  c++  java
  • equal to 操作的排序(Japanese_CI_AS和Chinese_PRC_CI_A)规则冲突的问题

    代码
    /*
    --整理者:永恒de影

    --整理时间:2010/06/07

    --内容:如何解决"equal to 操作的排序(Japanese_CI_AS和Chinese_PRC_CI_A)规则冲突的问题"

    */

    --★★★★★★★★★案例描述:★★★★★★★★★★★★★★★★★★★★★★★★★★★

         
    --1 我在中文版的数据库下:建立了一个存储过程

         
    --2 我想把该存储过程移到 日文版的数据库下

         
    --3 在日文版的数据库中执行时出现了以上的问题

    --★★★★★★★★★发生原因:★★★★★★★★★★★★★★★★★★★★★★★★★★★

         
    --Microsoft SQL Server 2000 中,字符串的物理存储由排序规则控制。
         --排序规则指定表示每个字符的位模式以及存储和比较字符所使用的规则。


    --★★★★★★★★★解决办法一★★★★★★★★★★★★★★★★★★★★★★★★★★★

        
    --在字符型的列充当连接条件时:加上COLLATE database_default (注:字符类型的列)
        
        例:
        
    SELECT D.*,T.*
        
    FROM #InputTime D
        
    LEFT JOIN [dbo].[ManuAttemperWG] T 
            
    ON  T.[StationID] = D.[StationID] COLLATE database_default
                
    AND T.InputTime = D.InputTime 
                
    AND D.InputDate = T.InputDate 
                
    AND T.InputDate = @startDate 
        
    WHERE NOT EXISTS(
              
    SELECT 1 
              
    FROM [dbo].[ManuAttemperWG]
              
    WHERE [StationID] = D.StationID COLLATE database_default
                  
    AND InputTime = D.InputTime 
                  
    AND InputDate = @startDate
          ) 

     
    --★★★★★★★★★解决办法二★★★★★★★★★★★★★★★★★★★★★★★★★★★

        SQL批量更改用户表内字符型字段的排序规则 (注:要修改的列不能被参照)
        
        例:
          
    USE DATABASE
         
          
    DECLARE @S NVARCHAR(1000)
         
    DECLARE C CURSOR FOR --不区分大小写
          SELECT 'ALTER TABLE ['+B.NAME+'] ALTER COLUMN ['+A.NAME+''+ TYPE_NAME   (A.XTYPE)+
            
    CASE WHEN TYPE_NAME(A.XTYPE) IN('TEXT','NTEXT'THEN '' ELSE 
                
    QUOTENAME(A.LENGTH,'(')
            
    END +' COLLATE CHINESE_PRC_CI_AS'  
        
    FROM SYSCOLUMNS A 
            
    JOIN SYSOBJECTS B ON A.ID=B.ID AND B.TYPE='U'
        
    WHERE TYPE_NAME(A.XTYPE) IN('VARCHAR','CHAR','NVARCHAR','NCHAR','TEXT','NTEXT')
        
    OPEN C
        
    FETCH C INTO @S
        
    WHILE @@FETCH_STATUS=0
        
    BEGIN
          
    EXEC(@S)
          
    FETCH C INTO @S
        
    END
        
    CLOSE C
        
    DEALLOCATE C
    GO


    --★★★★★★★★★扩展资料:★★★★★★★★★★★★★★★★★★★★★★★★★★★ 
      
    --1   排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集.如:   
        --Chinese_PRC_CS_AI_WS     
        --前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则。   
        --排序规则的后半部份即后缀   含义:     
        --_BIN   二进制排序     
        --_CI(CS)   是否区分大小写,CI不区分,CS区分   
        --_AI(AS)   是否区分重音,AI不区分,AS区分      
        --_KI(KS)   是否区分假名类型,KI不区分,KS区分    
        --_WI(WS)   是否区分宽度   WI不区分,WS区分
        --区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。   
        --区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,比较还将重音不同的字母视为不等。   
        --区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。   
        --区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项 

    --2  查看当前系统的排序规则 
       select serverproperty('Collation')

    --3 改变数据库的排序规则(做ALTER之前,要中断所有用户对此数据库的访问)
       use master
       
    go
       
    alter database dbname collate Chinese_PRC_CS_AS --规则名

         
          




     

     
  • 相关阅读:
    1.1 Recruitment 1.1.4 Sample Test(II)
    1.1 Recruitment 1.1.4 Sample Test(I)
    微信登录接口
    谷歌浏览器保留页面跳转前的请求
    积分墙项目接口文档
    @SneakyThrows
    security中使用单元测试
    Prometheus监控系统
    大数据-shell-脚本入门-开头格式、运行方式、多命令处理
    大数据-shell-概述
  • 原文地址:https://www.cnblogs.com/wequst/p/Chinese_PRC_.html
Copyright © 2011-2022 走看看