問題:在項目資料庫開發中,有時我們編寫的腳本,在本機執行是沒有問題的,但部署到伺服器的時候,卻在腳本運行時報錯了。報錯的中英文錯誤提示信息分別如下。中文:無法解決 equal to 運算中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之間 ...
問題:
在項目資料庫開發中,有時我們編寫的腳本,在本機執行是沒有問題的,但部署到伺服器的時候,卻在腳本運行時報錯了。報錯的中英文錯誤提示信息分別如下。
中文:無法解決 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.
根源:
根據博主(微信公眾號: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】