sqlserver2000排序規則

paulyibinyi發表於2008-07-02

sqlserver2000排序規則

關鍵詞:                                                      

SQL SERVER的排序規則平時使用不是很多,也許不少初學者還比較陌生,但有 一個錯誤大家應是經常碰到:   SQL   SERVER資料庫,在跨庫多表連線查詢時,若兩資料庫預設字符集不同,系統就會返回這樣的錯誤:    
                “無法解決   equal   to   操作的排序規則衝突。”  
   
  一.錯誤分析:  
    這個錯誤是因為排序規則不一致造成的,我們做個測試,比如:  
  create   table   #t1(  
  name   varchar(20)   collate   Albanian_CI_AI_WS,      
  value   int)  
   
  create   table   #t2(  
  name   varchar(20)   collate   Chinese_PRC_CI_AI_WS,          
  value   int   )  
   
  表建好後,執行連線查詢:  
   
  select   *   from   #t1   A   inner   join   #t2   B   on   A.name=B.name    
   
  這樣,錯誤就出現了:  
   
                        伺服器:   訊息   446,級別   16,狀態   9,行   1  
                        無法解決   equal   to   操作的排序規則衝突。  
    要排除這個錯誤,最簡單方法是,表連線時指定它的排序規則,這樣錯誤就  
  不再出現了。語句這樣寫:  
   
  select   *    
  from   #t1   A   inner   join   #t2   B    
  on   A.name=B.name   collate   Chinese_PRC_CI_AI_WS  
   
   
  二.排序規則簡介:  
   
          什麼叫排序規則呢?MS是這樣描述的:"在   Microsoft   SQL   Server   2000   中,  
  字串的物理儲存由排序規則控制。排序規則指定表示每個字元的位模式以及存  
  儲和比較字元所使用的規則。"  
    在查詢分析器內執行下面語句,可以得到SQL SERVER支援的所有排序規則。  
   
      select   *   from   ::fn_helpcollations()    
   
  排序規則名稱由兩部份構成,前半部份是指本排序規則所支援的字符集。  
  如:  
    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區分   
   
  區分大小寫:如果想讓比較將大寫字母和小寫字母視為不等,請選擇該選項。  
  區分重音:如果想讓比較將重音和非重音字母視為不等,請選擇該選項。如果選擇該選項,  
                    比較還將重音不同的字母視為不等。  
  區分假名:如果想讓比較將片假名和平假名日語音節視為不等,請選擇該選項。  
  區分寬度:如果想讓比較將半形字元和全形字元視為不等,請選擇該選項

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7199859/viewspace-368895/,如需轉載,請註明出處,否則將追究法律責任。

相關文章