無法解決 equal to 操作中 "Chinese_PRC_CI_AS_WS" 和 "Chinese_PRC_CI_AS" 之間的排序規則沖突


本來好好的,電腦重裝了一下居然碰到了這個問題。百度后知道了原因。記錄一下

是因為兩個表字段的排序規則不同導致的,於是找了很久,最后才發現原來是創建的臨時表造成的。

解決方案如下:

CREATE TABLE #Item(
  id INT PRIMARY KEY,
  item_id varchar(30) Collate Database_Default  ,
  item_name varchar(50) Collate Database_Default  ,
  seq varchar(10) Collate Database_Default  ,
  price money ,
  cost_price money ,
  [path]  varchar(200) Collate Database_Default  ,
  date_deleted datetime 
 )

 

后面加Collate Database_Default , 來引用數據庫默認的排序規則。

順便學習了下:

什么叫排序規則呢?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區分 

區分大小寫:如果想讓比較將大寫字母和小寫字母視為不等,請選擇該選項。
區分重音:如果想讓比較將重音和非重音字母視為不等,請選擇該選項。如果選擇該選項,
         比較還將重音不同的字母視為不等。
區分假名:如果想讓比較將片假名和平假名日語音節視為不等,請選擇該選項。
區分寬度:如果想讓比較將半角字符和全角字符視為不等,請選擇該選項

 

 

其他解決方法:

1.將數據庫中一個表的字段改成與另一個表中要比較的字段相同的排序規則。

 2.在SQL語句的Where子句后面加上類似這樣的SQL片段:collate Chinese_PRC_CI_AI_WS

    如:

Select A.* From A,B Where A.a = B.b collate Chinese_PRC_CI_AI_WS

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM