sql collate 子句 排序規則
阿新 • • 發佈:2018-11-30
排序規則沖突 數據庫排序 服務器 color data 麻煩 varchar 建議 style
SQL SERVER的排序規則平時使用不是很多,也許不少初學者還比較陌生,但有
一個錯誤大家應是經常碰到: SQL SERVER數據庫,在跨庫多表連接查詢時,若兩數據
庫默認字符集不同,系統就會返回這樣的錯誤:
“無法解決 equal to 操作的排序規則沖突。”
COLLATE 是一個子句,可應用於數據庫定義或列定義以定義排序規則,或應用於字符串表達式以應用排序規則轉換。
語法
COLLATE { <collation_name> | database_default } <collation_name> :: = { Windows_collation_name } | { SQL_collation_name }
collation_name 應用於表達式、列定義或數據庫定義的排序規則的名稱。
database_default 使 COLLATE 子句繼承當前數據庫的排序規則。
一.錯誤分析:
這個錯誤是因為排序規則不一致造成的,我們做個測試,比如:
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 collate database_default=B.name collate database_default
select* from #t1 A inner join #t2 B on A.name =B.name collate database_default
語法規則 字段名後跟 collate database_default 建議用 collate database_default 這樣的話 繼承自 當前數據庫排序規則 避免後續有不必要的麻煩
sql collate 子句 排序規則