SQL排序規則衝突形成查詢失敗的一例解決辦法

我之前設計的一個JOB一直運行得很正常,後來因爲ERP升級之後就沒法正常運行了,顯示的錯誤是「Cannot resolve collation conflict for equal to operation」,如圖:
 
分析其緣由,係數據庫中的表採用了不一樣的排序規則形成的。這種排序規則主要對文字部分有效,須要調整字符字段的排序規則,將排序規則調整成默認的排序規則通常就好了。調整方法以下圖:
 
 
以上解決方案是針對個人此次問題的一個個案處理方法,對於更通常的解決方法,下面的例子能夠參考:
 
SQL SERVER的排序規則平時使用不是不少,也許很多初學者還比較陌生,但有一個錯誤你們應是常常碰到: SQL SERVER數據庫,在跨庫多表鏈接查詢時,若兩數據庫默認字符集不一樣,系統就會返回這樣的錯誤: 
       
           「沒法解決 equal to 操做的排序規則衝突。」
 
(英文版SQL的錯誤同上面的截圖)
 


一.錯誤分析:
  這個錯誤是由於排序規則不一致形成的,咱們作個測試,好比:
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 中,字符串的物理存儲由排序規則控制。排序規則指定表示每一個字符的位模式以及存儲和比較字符所使用的規則。"
Microsoft SQL Server 2000 排序規則包括如下分組:
一、Windows排序規則
Windows排序規則基於爲相關聯的Windows區域設置所定義的規則對存儲字符數據的規則進行定義。Windows基本排序規則指定應用字典排序時所用的字母表或語言,以及用於存儲非Unicode字符型數據的代碼頁。
二、SQL排序規則
提供SQL排序規則是爲了與Microsoft SQL Server 早期版本中的排序次序兼容。
 
須要注意的是修改排序規則必須重建或從新裝載數據庫,也就是說排序規則一旦到數據裝好了就不可修改了。  
 
  在查詢分析器內執行下面語句,能夠獲得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區分  區分大小寫:若是想讓比較將大寫字母和小寫字母視爲不等,請選擇該選項。 區分重音:若是想讓比較將重音和非重音字母視爲不等,請選擇該選項。若是選擇該選項,          比較還將重音不一樣的字母視爲不等。 區分假名:若是想讓比較將片假名和平假名日語音節視爲不等,請選擇該選項。 區分寬度:若是想讓比較將半角字符和全角字符視爲不等,請選擇該選項
相關文章
相關標籤/搜索