SQL SERVER 從Excel導入數據時不同語言字符集的比較問題

問題:
不同的電腦上的兩個數據庫DB1、DB2

DB1數據庫字符集: SQL_Latin1_General_CP1_CI_AS

DB2數據庫字符集: Chinese_Taiwan_Stroke_CI_AS

從Excel中導入數據到臨時表中,然後和數據庫表中現有數據做對比,存在就更新,不存在就插入

*merge dbTable
using (SELECT CICID,CurrencyType,SUM(Amount)as Amount FROM #SCTemp
group by CICID,CurrencyType) as SCTemp
on SCInfo.CurrencyType=SCTemp.CurrencyType
when matched
then update set SCInfo.TotalAmount =SCInfo.TotalAmount+ SCTemp.Amount
when not matched
then insert values(SCTemp.CICID,1,SCTemp.CurrencyType,SCTemp.Amount,0,0,0,’Black Friday Plan - MVP Refunds’);*

然後on後面的條件判斷就出錯了
錯誤信息:
Msg 468, Level 16, State 9, Line 2
Cannot resolve the collation conflict between “SQL_Latin1_General_CP1_CI_AS” and “Chinese_Taiwan_Stroke_CI_AS” in the equal to operation.
百思不得其解,又想用下面語句修改數據庫字符集,
alter database HOHCS_Lagacy collate Chinese_Taiwan_Stroke_CI_AS
結果失敗。

解決方案:

後來網上查詢不同數據庫字符集之間如何查詢,原來是這樣,需要關鍵字“Collate Database_Default”轉換字符集,把語句改成如下:

on SCInfo.CurrencyType=SCTemp.CurrencyType Collate Database_Default
結果查詢成功!

總結:不同字符集之間比較,關鍵字“Collate Database_Default ”起作用

另外:
查看SQLSERVER的字符集設置sql如下
use master
go
select SERVERPROPERTY(N’edition’) as Edition –數據版本,如企業版、開發版等
,SERVERPROPERTY(N’collation’) as Collation –數據庫字符集
,SERVERPROPERTY(N’servername’) as ServerName –服務名
,@@VERSION as Version –數據庫版本號
,@@LANGUAGE AS Language –數據庫使用的語言,如us_english等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章