問題:
不同的電腦上的兩個數據庫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等