equal to 操作的排序(Japanese_CI_AS和Chinese_PRC_CI_A)规则冲突的问题

 

ExpandedBlockStart.gif 代码
/*
--整理者:永恒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  -- 规则名

     
      




 

 

 

 

转载于:https://www.cnblogs.com/wequst/archive/2010/06/07/Chinese_PRC_.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值