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

2021-09-21 10:53:14 字數 2065 閱讀 1496

我以前設計的乙個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 排序規則包括以下分組:

1、windows排序規則

windows排序規則基於為相關聯的windows區域設定所定義的規則對儲存字元資料的規則進行定義。windows基本排序規則指定應用字典排序時所用的字母表或語言,以及用於儲存非unicode字元型資料的**頁。

2、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區分 

區分大小寫:如果想讓比較將大寫字母和小寫字母視為不等,請選擇該選項。

區分重音:如果想讓比較將重音和非重音字母視為不等,請選擇該選項。如果選擇該選項,

比較還將重音不同的字母視為不等。

區分假名:如果想讓比較將片假名和平假名日語音節視為不等,請選擇該選項。

區分寬度:如果想讓比較將半形字元和全形字符視為不等,請選擇該選項

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

我以前設計的乙個job一直執行得很正常,後來由於erp公升級以後就無法正常執行了,顯示的錯誤是 cannot resolve collation conflict for equal to operation 如圖 分析其原因,系資料庫中的表採用了不同的排序規則造成的。這種排序規則主要對文字部分有效...

SQL查詢排序

確定資料 from 表名稱 別名 確定滿足條件的資料行 where 過濾條件 s 控制要顯示的資料列 select distinct 列名稱 別名 針對查詢結構進行排序 order by 字段 asc desc 字段 asc desc 預設情況下選擇asc公升序排列。因為在select 之後執行,所...

無法解決 equal to 操作的排序規則衝突

sql server的排序規則平時使用不是很多,也許不少初學者還比較陌生,但有 乙個錯誤大家應是經常碰到 sql server資料庫,在跨庫多表連線查詢時,若兩資料 庫預設字符集不同,系統就會返回這樣的錯誤 無法解決 equal to 操作的排序規則衝突。一.錯誤分析 這個錯誤是因為排序規則不一致造...