“希伯来语_CI_AS”与“ SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突

问题描述 投票:0回答:2

在我正在执行的某些过程中,我编写此代码:

update a
set a.custName = b.custName
from #x as a inner join pl_Customer as b on a.Company_Code = b.Company_Code and a.cust = b.Cust

我收到此错误:

无法解决“希伯来语_CI_AS”与等于操作中的“ SQL_Latin1_General_CP1_CI_AS”。

我尝试这样解决它:

update a
set a.custName = b.custName
from #x as a inner join pl_Customer as b on a.Company_Code = b.Company_Code and a.cust = b.Cust
collate Latin1_General_CI_AI;

但仍然是错误。

sql sql-server collation collate
2个回答
0
投票

在您的临时表定义#x中,将COLLATE DATABASE_DEFAULT添加到String列,例如

custName nvarchar(xx) COLLATE DATABASE_DEFAULT NOT NULL

0
投票

默认情况下,临时表是使用服务器的排序规则创建的。看起来您服务器的排序规则是SQL_Latin1_General_CP1_CI_AS,数据库的排序规则是Hebrew_CI_AS,反之亦然。

您可以通过使用临时表的列定义中的collate database_default来克服此问题,例如:

create #x (
    ID int PRIMARY KEY,
    Company_Code nvarchar(20) COLLATE database_default,
    Cust nvarchar(20) COLLATE database_default,
    ...
)

这将使用当前数据库的排序规则而不是服务器的排序规则来创建列。

© www.soinside.com 2019 - 2024. All rights reserved.