在我正在执行的某些过程中,我编写此代码:
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;
但仍然是错误。
在您的临时表定义#x中,将COLLATE DATABASE_DEFAULT添加到String列,例如
custName nvarchar(xx) COLLATE DATABASE_DEFAULT NOT NULL
默认情况下,临时表是使用服务器的排序规则创建的。看起来您服务器的排序规则是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,
...
)
这将使用当前数据库的排序规则而不是服务器的排序规则来创建列。