sql server排序規則衝突問題解決

問題:
在項目數據庫開發中,有時咱們編寫的腳本,在本機執行是沒有問題的,但部署到服務器的時候,卻在腳本運行時報錯了。報錯的中英文錯誤提示信息分別以下。
中文:沒法解決 equal to 運算中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之間的排序規則衝突。
English:Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Chinese_PRC_CI_AS" in the equal to operation.html

根源:
根據博主(微信公衆號:SQL數據庫編程,微信號:zhang502219048)實際工做中遇到的問題,歸納爲:若是本機是中文操做系統,而服務器是英文操做系統,並且腳本使用了臨時表而且沒有指定nvarchar或varchar文本字段的排序規則,並在join錶鏈接中關聯項目數據庫的表(項目數據庫默認排序規則爲Chinese_PRC_CI_AS)的on關聯條件中用到此文本字段,則會出現此問題。數據庫

解決方案:
方案1(不推薦)
在join鏈接的on條件字段中,對臨時表指定排序規則。這種方法不推薦,由於若是有10個join臨時表的語句,就得寫10次,太過於繁瑣。編程

select *
from #t1 a
inner join t2 b 
    on b.name = a.name collate Chinese_PRC_CI_AS

方案2推薦
在臨時表的nvarchar或varchar文本字段定義中,增長指定排序規則,一勞永逸,不須要再在join鏈接的on條件中指定排序規則。服務器

create table #t1
(
    name nvarchar(50) collate Chinese_PRC_CI_AS
)

【轉載請註明博文來源:https://www.cnblogs.com/zhang502219048/p/12992611.html】微信

相關文章
相關標籤/搜索