【问题标题】:Collation error joining two tables of different DB连接不同数据库的两个表的排序规则错误
【发布时间】:2022-01-24 23:29:52
【问题描述】:

我有两个数据库:db_A 和 db_B。

我正在尝试将 db_A 中的一个表与 db_B 的另一个表连接起来。这两个表都有一个共同的列 id_card。所以我正在尝试这样的事情:

SELECT *
FROM db_A.table_1
LEFT JOIN db_B.table_2
ON db_A.table_1.id_card = db_B.table_2.id_card
;

但是当我在 SQL Server 中运行这段代码时,我得到了这个错误:

消息 468,级别 16,状态 9,第 76 行无法解析排序规则 “Modern_Spanish_CI_AS”和“Latin1_General_CI_AI”之间的冲突 等于运算。

有没有办法解决这个问题?

谢谢。

【问题讨论】:

  • 使用COLLATE
  • 仅供参考3+ part naming on Columns will be Deprecated,应该避免。您最好在FROM 中为您的对象添加别名并使用它们来限定您的列。这样可以避免使用将被弃用并可能在未来版本中删除的功能,并使您的代码更加简洁和可读。

标签: sql sql-server collation


【解决方案1】:
SELECT *
FROM db_A.table_1
LEFT JOIN db_B.table_2
ON db_A.table_1.id_card = db_B.table_2.id_card collate Modern_Spanish_CI_AS

【讨论】:

  • 现在我收到以下错误:Msg 447, Level 16, State 0, Line 63 Expression type int is invalid for COLLATE 子句。
  • 您的 id_card 字段是 int 还是 varchar?
  • @Miquel 那么您将不会在问题中遇到之前的错误。如果比较intvarchar,则varchar 将隐式转换为int,并且不会出现排序错误。
  • 都必须是varchar,因为都有数字和字母,像这样:34543H
  • 如果两者都是 varchar 值,您将不会收到错误 "Expression type int is invalid for COLLATE 子句。" @Miquel ...您肯定是在隐藏我们这里的东西。
猜你喜欢
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
  • 2019-08-11
  • 2018-03-20
  • 1970-01-01
  • 2021-02-06
相关资源
最近更新 更多