无法解析的equal to动作的定序冲突

在最近的工作中使用SQL数据库的时候出现以下错误。具体情况是这样的:

 

在插入数据前,创建了一个临时表#Tmp_Table。然后使用临时表里面的列表项与已有表的列表项进行join的对比。以下是比较具体的代码:

Create Table #Tmp_Special_List([ID][nvarchar](400) NULL, [Name][nvarchar](50) NULL, [Reason][ntext]NULL, [Remark][ntext]NULL);

 

Select 已有表的列表项.ID From (已有表 inner join #Tmp_Table on 已有表的列表项.ID=#Tmp_Table.ID)

以上会出现以下的错误

 

訊息 468,層級 16,狀態 9,行 1
無法解析 equal to 作業中 "Latin1_General_CI_AI" 與 "Chinese_Taiwan_Stroke_CI_AS" 之間的定序衝突。

 

上网找了找原因。原来SQL有以下特性:

一般繁体中文版 MSSQL 建置时多数人会用预设定序 Chinese_Taiwan_Stroke_CI_AS。但是其中一个资料库是从别的环境附加进来的,该资料库定序是用 Chinese_Taiwan_Stroke_BIN (或其他定序)。一般来说,在同一个资料库中的资料表的定序都会使用资料库预设值。此问题常发生于处理两个资料库的资料表进行JOIN关联之时而建立临时表#tbMain会使用TempDB资料库的空间与定序而TempDB资料库的定序使用服务器的定序设定所以当JOIN这两个不同定序的资料表时,字串栏位就无法进行比对而回应错误。解决方法要使用强制转换。可以在创建临时表的时候强制指定定序

 

Create Table #Tmp_Special_List([ID][nvarchar](400) COLLATE Chinese_Taiwan_Stroke_BIN NULL, [Name][nvarchar](50) COLLATE Chinese_Taiwan_Stroke_BIN NULL, [Reason][ntext] COLLATEChinese_Taiwan_Stroke_BIN NULL, [Remark][ntext] COLLATE Chinese_Taiwan_Stroke_BIN NULL);

posted @ 2013-06-15 11:33  Matrix博客园  阅读(606)  评论(0编辑  收藏  举报